Python爬蟲入門教程 18-100 煎蛋網XXOO圖片抓取


寫在前面

很高興我這系列的文章寫道第18篇了,今天寫一個爬蟲愛好者特別喜歡的網站煎蛋網http://jandan.net/ooxx,這個網站其實還是有點意思的,網站很多人寫了N多的教程了,各種方式的都有,當然網站本身在爬蟲愛好者的不斷進攻下,也在不斷的完善,反爬措施也很多,今天我用selenium在揍他一波。

在這里插入圖片描述

整體看上去,煎蛋網的妹子圖質量還是可以的,不是很多,但是還蠻有味道的,這可能也是爬蟲er,一批一批的奔赴上去的原因。

1. 網站分析

這個網站如果用 selenium 爬取,其實也沒什么要分析的,模擬訪問就行,導入必備的模塊。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from lxml import etree
import requests

import time

我使用的是PhantomJS 去加載瀏覽器,關於這個PhantomJS,去互聯網搜索一下吧,資料大把,會看的很爽的,總之呢,它可以模擬一個真實的瀏覽器做任何事情,得到你想要的數據。

browser = webdriver.PhantomJS()
browser.set_window_size(1366, 768)  # 這個地方需要設置一下瀏覽器的尺寸
wait = WebDriverWait(browser,10)
browser.get("http://jandan.net/ooxx")

2. 分析數據

程序獲取到數據之后就可以對數據進行處理了,編寫一個get_content函數,用來處理網頁源碼。

def get_content():

    try:

        wait.until(
            EC.presence_of_element_located((By.XPATH,'//*[@id="comments"]/ol'))
        )
        #
        print("正在爬取{}".format(browser.current_url))
        page_source = browser.page_source  # 獲取網頁源碼
        html = etree.HTML(page_source)  # 解析源碼
        imgs = html.xpath("//li[contains(@id,'comment')]//img/@src")  # 匹配圖片
        download(imgs)

    except Exception as e:
        print("錯誤")
        print(e)
    finally:
        browser.close()

圖片獲取到之后,在上面的代碼中,注意有一個地方調用了一個 download函數,這個函數就是用來下載圖片的


def download(imgs):
    path = "./xxoo/{}"  # 路徑我寫死了
    for img in imgs:
        try:
            res = requests.get(img)
            content = res.content
        except Exception as e:
            print(e)
            continue

        file_name = img.split("/")[-1] # 獲取文件名

        with open(path.format(file_name),"wb") as f:
            f.write(content)
            print(file_name,"成功下載文件")
            time.sleep(0.3)

    # 循環下載完畢,進行翻頁操作 previous-comment-page
    next = wait.until(
        EC.presence_of_element_located((By.XPATH, '//*[@id="comments"]//a[@class="previous-comment-page"]'))
    )
    next.click()
    return get_content()  # 繼續調用上面的網頁源碼分析流程

OK,運行一下。

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM