1、概述
從抓取、解析、儲存、反爬、加速五個方面介紹了利用 Python 進行網路爬蟲開發的相關知識點和技巧,介紹了不同場景下如何採取不同措施高效地進行資料抓取的方法,包括 Web 抓取、App 抓取、資料儲存、代理選購、驗證碼破解、分散式抓取及管理、智慧解析等多方面的內容,另外還結合了不同場景介紹了常用的一些工具包,全部內容是我在從事網路爬蟲研究過程以來的經驗精華總結。
爬取
對於爬取來說,我們需要學會使用不同的方法來應對不同情景下的資料抓取任務。
爬取的目標絕大多數情況下要麼是網頁,要麼是 App,所以這裡就分為這兩個大類別來進行了介紹。
對於網頁來說,我又將其劃分為了兩種類別,即服務端渲染和客戶端渲染,對於 App 來說,我又針對介面的形式進行了四種類別的劃分——普通介面、加密引數介面、加密內容介面、非常規協議介面。
所以整個大綱是這樣子的:
網頁爬取
服務端渲染
客戶端渲染
App 爬取
普通介面
加密引數介面
加密內容介面
非常規協議介面
爬取 / 網頁爬取
服務端渲染的意思就是頁面的結果是由伺服器渲染後返回的,有效資訊包含在請求的 HTML 頁面裡面,比如貓眼電影這個站點。客戶端渲染的意思就是頁面的主要內容由 JavaScript 渲染而成,真實的資料是通過 Ajax 介面等形式獲取的,比如淘寶、微博手機版等等站點。
服務端渲染的情況就比較簡單了,用一些基本的 HTTP 請求庫就可以實現爬取,如 urllib、urllib3、pycurl、hyper、requests、grab 等框架,其中應用最多的可能就是 requests 了。
對於客戶端渲染,這裡我又劃分了四個處理方法:
- 尋找 Ajax 介面,此種情形可以直接使用 Chrome/Firefox 的開發者工具直接檢視 Ajax 具體的請求方式、引數等內容,然後用 HTTP 請求庫模擬即可,另外還可以通過設定代理抓包來檢視介面,如 Fiddler/Charles。
- 模擬瀏覽器執行,此種情形適用於網頁介面和邏輯較為複雜的情況,可以直接以可見即可爬的方式進行爬取,如可以使用 Selenium、Splinter、Spynner、pyppeteer、PhantomJS、Splash、requests-html 等來實現。
- 直接提取 JavaScript 資料,此種情形適用於真實資料沒有經過 Ajax 介面獲取,而是直接包含在 HTML 結果的某個變數中,直接使用正規表示式將其提取即可。
- 模擬執行 JavaScript,某些情況下直接模擬瀏覽器執行效率會偏低,如果我們把 JavaScript 的某些執行和加密邏輯摸清楚了,可以直接執行相關的 JavaScript 來完成邏輯處理和介面請求,比如使用 Selenium、PyExecJS、PyV8、js2py 等庫來完成即可。
爬取 / App 爬取
對於 App 的爬取,這裡分了四個處理情況:
- 對於普通無加密介面,這種直接抓包拿到介面的具體請求形式就好了,可用的抓包工具有 Charles、Fiddler、mitmproxy。
- 對於加密引數的介面,一種方法可以實時處理,例如 Fiddler、mitmdump、Xposed 等,另一種方法是將加密邏輯破解,直接模擬構造即可,可能需要一些反編譯的技巧。
- 對於加密內容的介面,即介面返回結果完全看不懂是什麼東西,可以使用可見即可爬的工具 Appium,也可以使用 Xposed 來 hook 獲取渲染結果,也可以通過反編譯和改寫手機底層來實現破解。
- 對於非常規協議,可以使用 Wireshark 來抓取所有協議的包,或者使用 Tcpdump 來進行 TCP 資料包截獲。
以上便是爬取流程的相關分類和對應的處理方法。
當然爬蟲採集資料使用高質量的http代理 ,效果是最好的。
本作品採用《CC 協議》,轉載必須註明作者和本文連結