03.06 爬蟲怎麼解決封IP的問題?

Laura-wei


總的來講,網站的反爬蟲的策略有:檢測爬取頻率、併發連接數目、HTTP請求header包括referer和UserAgent、網站日誌和訪問日誌比對、判定User Agent,IP訪問次數,通過這些數據來檢測這個動態是爬蟲還是用戶個人行為。

其中最常見的就是判斷你的請求頻率和併發數量,如果你在短時間內發送了大量的請求,也就是你的爬取速度很快的話,那麼他就直接判斷你是爬蟲,這時候先把你IP封了再說,免得給自己的網站帶來負擔。

那麼這些策略我們都如何應對呢?這幾個方法都不同,

1、爬蟲偽裝瀏覽器點擊

我們先理解一下網站的代碼執行,首先我們向服務器發送請求,這時服務器的後臺php、java都會執行,然後網站代碼被髮送到本地,在本地時js、ajax會在瀏覽器內核中執行。所以這時候我們就知道,爬蟲不僅要欺騙php java代碼、還要欺騙js和ajax代碼。

那麼不同的代碼就有不同的執行順序,關於這一部分,這個教程給了很好的解釋

(http://blog.csdn.net/wang1144/article/details/39378909)

2、使用代理

爬的太快會被封,是一定的。爬的太慢又非常耗時間。所以很多人都會說可以使用代理,所謂代理就是介於用戶與網站之間的第三者:用戶先將請求發到代理,然後代理再發到服務器,這樣看起來就像是代理在訪問那個網站了,實現一個不斷的切換IP的假象。網上免費代理很多,但是能用的沒幾個,如果不想購買付費的代理,大家可以學習一下

3、降低訪問頻率

如果一直找不到好用的免費代理,又不想付費,最好的辦法就是降低訪問頻率了。這樣做可以達到與用代理一樣的效果——防止被對方從訪問量上看出來。比如:每抓取一個頁面就休息隨機幾秒、限制每天抓取的頁面數量。當然,在抓取效率上會差很多,因為數據量大的話,時間就會很長。


路人甲


大家在爬蟲的時候確實很容易遇到這個問題,因為目前普通網站也沒有什麼好的方案解決爬蟲的方法,秉著寧願殺錯也不放過,一般根據一段時間內ip訪問的頻率來禁止登入網站。

在實際操作中,一般我們有幾個簡單的思路去避免該問題,大大提高爬蟲的效率。

間隔時間爬取

這比較容易理解,對爬蟲腳本的抓取頻率限制來繞過IP限制,儘量模仿人的訪問速率去抓取頁面。一般流程是這樣,先自己手動瀏覽一遍網站,看人工大概需要多少秒完成一次網站瀏覽,然後把這個時間作為最大上限值,通過二分法測試來不斷地壓縮機器爬取時間上限。

多IP代理

這個就更加穩定些,而且併發效率高,不用卡爬取的時間上限。只需維護好一個IP池,將爬蟲任務分拆變成很多個子任務給不同的IP去爬取,最終達到高併發爬取的目的。

目前爬蟲常用的多IP方案是動態代理,假設你用這個動態代理去訪問百度, 百度識別出來的IP並不是你的本機IP,而是一個隨機的IP,每次都會變化,也就是說,你只需設置一次代理,就可以得到隨機變化的IP,免去頻繁更換代理的麻煩。

為避免廣告嫌疑,我就不寫我公司購買的代理服務了,有需要可以自己去找,網上很多,找一個大型的IP代理商即可。現在免費的我用過有西刺代理,快代理等,免費的相對不穩定而且大家都用免費更容易被封,所以建議還是部署正規的IP代理池,也花不了多少錢。當然如果你有更好的方法或建議歡迎在評論區探討交流,大家互相學習學習。


如果你對學習人工智能和科技新聞感興趣,歡迎訂閱我的頭條號。我會在這裡發佈所有與科技、科學以及機器學習有關的有趣文章。偶爾也回答有趣的問題,有問題可隨時在評論區回覆和討論,看到即回。


Hacker


對於我們普通P民來說,防止反爬封IP貌似只有降低爬蟲訪問頻率以達到完全模擬真實用戶訪問的方法。

不過最近我在V站看到有大神開源了一款高性能的的分佈式代理IP池,最重要的是“免費”,不要998也不要98,真正的免費+高性能IP代理池,絕對是題主期待的最佳解決方案。

這款開源產品叫 HAipproxy ,github上可以搜到,在下指我的23寸屏幕發誓,絕無廣告嫌疑!talk is cheap,題主去試了覺得好請回來給我點個贊!

以下是V站大神的測試截圖:


粽子Han


爬蟲爬取網站數據的時候,可能會遇到不同類型的ip限制。

1,如果是網站限制了你的ip,那麼可以換一個ip試試。

2,如果是因為爬取數據的頻率過快導致觸發了網站的反爬機制,那麼可以在每次爬取的間隙設置一個隨機的等待時間。

3,如果是因為爬取次數太多被網站封了ip,那麼可以使用ip代理的方式解決問題。


GeCoder


代理這方面我寫過原生的,效果不太好,我用了大概300個IP對房天下,但是掛了一晚上也就十萬左右,看日誌大概跑了五六個小時,建議還是看看自己用的框架的手冊,看看代理和多線程的實現是怎麼樣的,畢竟產品封裝的要比我們好,基本上都是指定文件做為IP池就可以,關注一下each,會學到不少東西


Rennes1


下載兔子IP使用就能用來換IP地址解除限制的


分享到:


相關文章: