爬蟲——網頁爬取方法和網頁解析方法

許小倉發表於2020-12-07

爬取網頁的方法

按照網頁和APP劃分,參考崔慶才老師的分享,可以劃分為:網頁爬取和App爬取。

網頁爬取

(1)服務端渲染:頁面結果由伺服器渲染後返回,有效資訊包括在伺服器發來的HTML中,比如貓眼電影網站。

使用基本的HTTP請求庫便可以實現爬取,如urllib、urllib3、pycurl、hyper、requests、grab等框架,其中運用最多的是requests。

(2)客戶端渲染:頁面內容由JavaScript渲染而成,真實資料通過Ajax獲取,比如淘寶,今日頭條網頁內容。當操作獲取更多資料時,URL沒有變化。

客戶端渲染,崔老師給了四個方法:

  • 尋找Ajax介面,找到引數、請求方式,然後用HTTP庫模擬;使用代理包Fiddler/Charles檢視介面。
  • 模擬瀏覽器執行,適用於藉口複雜的情況。如使用Selenium、Splinter、Spynner、pyppeteer、PhantomJS、Splash、requests-html等實現,最常用的是Selenium。
  • 直接提取JavaScript資料,適用於資料包含在HTML的結果之中,使用正規表示式即可獲取。
  • 模擬執行JavaScript。適用於已經掌握了JavaScript的某些執行和加密邏輯,如使用Selenium、PyExecJS、PyV8、js2py等庫.

渲染:英文是render,通俗理解是通過特定方式把資訊呈現給使用者的過程。

App爬取

(1)普通無加密介面:

直接抓保獲取請求,抓包工具有 Charles、Fiddler、mitmproxy。

(2)加密引數介面:

使用Fiddler、mitmdump、Xposed 等實時處理;破解加密邏輯。

(3)加密內容介面:

適用於獲取的內容看不懂。可以使用可見即可爬的工具Appium、Xposed、hook獲取渲染結果;反編譯破解。

(4)非常規協議介面

非常規HTTP、HTTPS協議,直接抓包沒有結果。使用 Wireshark抓取所有協議包,或使用Tcpdump實現TCP資料包截獲。

如何選擇爬取方法

在爬取內容前,需要先對網頁的結構進行分析,分析需要獲取的資料儲存在哪裡,從而選擇適合的爬取方法。

頁面解析的方法

解析方法使用的庫
正規表示式re
Xpathlmx, Serapy Selecto
Json/XMLjson, xml2dct
CSS Selectorpyquery, cssselect

此外還有一種方法是智慧解析,因學習深度沒有達到,此部分內容先不展開。

內容儲存

爬取內容的儲存方法有很多種,需要根據需求選擇儲存方式。

檔案形式儲存載體常用庫
檔案JSON、CSV、TXT、圖⽚、視訊、⾳頻等csv、xlwt、json、pandas、pickle、python-docx 等
資料庫MySQL、MongoDB、HBase 等pymysql、pymssql、redis-py、pymongo、py2neo、thrift
搜尋引擎Solr、ElasticSearch 等elasticsearch、pysolr 等
雲端儲存七⽜雲、又拍雲、阿里雲、騰訊雲、AmazonS3 等qiniu、upyun、boto、azure-storage、google-cloud-storage 等

參考資料

這可能是你見過的最全的網路爬蟲乾貨總結!

相關文章