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

夢想橡皮擦發表於2019-01-04

寫在前面

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

在這裡插入圖片描述

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

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

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,執行一下。

在這裡插入圖片描述

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

相關文章