剛開始學爬蟲請教一下在座大神,拿到一個要爬取的網頁之後怎麼確定用什麼方式爬取?比如請求有的用selenium有的用requests解析有的用xpath 有的用json該如何選擇?或者說網頁可以大體分為哪幾類分別用什麼方法?


一、如何選擇requests和selenium?

首先有個基本認識:所有selenium能獲取到的數據使用requests都可以獲取到

那麼為什麼還要用selenium呢?

原因如下:

1、訪問的介面有加密參數,而你不會破解。

2、介面太複雜,比如參數幾十個,而你想省事,用selenium可能就是點擊一下就完事了

3、想要獲取的數據顯示在一個頁面上,但是如果通過介面請求的話,需要訪問數個甚至幾十個介面纔行。這個時候用selenium讓瀏覽器幫你請求這麼多介面,然後把數據展示當頁面上。我們只要輕鬆的處理一個頁面就好了

那麼什麼情況下必須用requests呢?

其實沒有必須的情景,或者我還不知道。不過用requests的優勢有以下幾點:

1.消耗資源少。selenium需要渲染頁面,以及載入很多靜態資源、執行很多JS代碼。但這些對我們需要的數據沒啥用處。用selenium打開一個網頁耗費的資源可能是用requests請求一個網頁源碼的幾百倍

2.依賴簡單。雖然selenium也有無頭模式,但安裝使用都比較麻煩,特別是在linux環境下。但requests就很簡單了

二、解析方式如何選擇?

關於正則和Xpath的選擇推薦:XPath與正則表達式在文本數據提取時該如何選擇?

關於JSON的選擇:如果頁面是JSON樣式,一般是使用JSON來解析的。但是,前提是你需要獲取很多個欄位,如果僅僅是獲取一兩個欄位的話,還不如用正則省事。

三、網頁如何分類?

額,這個問題好複雜。不會。


總的來說就是遇到山拆山,遇水搭橋。

首先網頁抓取方式有以下幾種情況和應對辦法:

1、在登錄的時候有的需要拉動滑塊,或者點擊字體和圖片一類的操作,這種的呢你可以使用selenium 來過滑塊這一關,至於圖片點擊一類的,可以先識別出來後點擊,現在圖片識別有現成的包這有個哥們寫了流程寫的很好你可以借鑒,如果覺得效果不好你就要自己訓練模型來專門應對某些網站或某種類的的圖片進行解析以提高準確率

python爬蟲20 | 小帥b教你如何識別圖片驗證碼?

mp.weixin.qq.com圖標

2、當過了第一關之後,下來就是進入列表頁或者詳情頁進行抓取,主要的抓取手段可以分為,直接構建請求在介面獲取請求結果,如果是json的話那就方便了,直接結構化存儲就完事了,做好欄位對應,或者可以在網頁直接住區,那就是像什麼 xpath pyquery bs4 正則一類的操作了,期中在這裡還是建議不要用bs4那玩意效率低,其它的還行我現在用的是pyquery和xpath還有就是scrapy自帶的解析器,如果遇到難搞的網站或者網頁複雜的話,就直接模擬劉瀏覽器解決就完事了,不過現在好多網站都做了webdriver的檢查和監控,因為模擬瀏覽器如:PhantomJS或者chrome等都有些參數跟正常瀏覽器有出入,是網站是可以辨識出你是不是爬蟲的,所以還要研究一下混淆參數的問題

3、忘記了一點加一下:還有就是如何偽裝請求,簡單粗暴發就是使用完全一致的header頭,搞一下cookie,再不行就上代理池就完事了~~~


你的看到你拿到的數據是什麼樣的,才能決定使用什麼技術。

比如一般我用requests,但是發現下載下來的數據沒有我要的欄位。分析js得知很多數據都是非同步載入進來的。非同步介面又很亂,難以分析。那麼只能用模擬瀏覽器的方式了,不得已選擇了selenium。

至於得到數據後xpath還是cssselector,這得看那個方便,或者你熟悉哪個語法。這裡問題到不大,效率接近。

如果人家介面很規整,下下來純純的json數據,那就沒必要用selenium了,直接爬介面就好了。當然xpath也用不到了,json就搞定了。


可以參考我之前的一個回答

想自學python爬蟲建議買哪些書??

www.zhihu.com圖標

當然是選擇jvppeteer,一個框架全搞定


很少爬數據,偶爾用的基本都是json。


對方網頁支持用json當然是模仿http消息直接獲取完整的json格式數據簡單,如果不支持個人是喜歡用模仿瀏覽器再用xpath來抓取


(剛入門的萌新,如有理解錯誤還請評論區糾正。)

我一開始也是這樣,搞不懂應該怎麼做。究其原因是沒有基礎,知識面不夠廣(至少連接到javascript比較好)。

Selenium 和requests 選哪種?如果技術夠 絕對首選requests 效率高 速度快。

說到底他們兩個都是獲取數據的方式,而selenium 本質是個瀏覽器,等於你在操作一個瀏覽器,所以網頁展示到你面前的數據和你自己打開的基本一致。

而requests 你至少需要了解get post,cookie headers。通過模仿瀏覽器所發出的請求來拿到源數據(這其中可能會有很多步的請求才能拿到最終完整數據)。

你現在可以搞明白一個網頁是如何展示到你眼前的嗎?如果不能,而且確實打算學爬蟲,那學到js是不可避免的。(至少搞懂它怎麼工作的)

Xpath 屬於你拿到數據對數據進行篩取的一個工具,這個掌握一個就好了(我用的beautiful soup)

Json 屬於一種數據格式而已,在你拿到一種有特定格式的數據後 用對應的包處理 會很容易,而且這種格式用的也很多。


推薦閱讀:
相關文章