我爬網站的時候爬久了網站就會響應連接超時導致之後無法正常爬取,而此時網路很好但是有好多頁面都無法打開?

這應該怎麼辦


大部分網站都有反爬措施,你爬久了肯定觸發反爬了。具體應對手段依網站而定。

有的網站帶個瀏覽器的UA就行;

有的網站要帶合理的referer;

有的網站用cookie做認證,需要你構造出合法的cookie;

有的網站需要登錄才能訪問,那你模擬登錄咯;

還有的網站直接根據IP訪問頻率做限制,這個只能用代理池或者網路重新撥號,或者降低抓取頻率。

具體站點用哪些方式反爬,多調試就知道咯。

----------( ̄▽ ̄)~*

我是一個學了七年化學,靠自學轉行的萌新碼農,主業爬蟲,會點前後端,如果你也熱愛技術,想學習爬蟲知識,或者想要轉行,不妨點一波關注哦~~

…更多回答請看徐昊旻


久了之後就會被對方網站監測到你的大量長時間爬取的行為,就會有對應的防採集措施,就是你看到的超時等問題,其實你的網路是好的,只是對方網站拒絕給你正常數據,要繼續採集有幾種辦法:

1. 降低採集速度,等待一段時間之後,封鎖解除再來採集,一般都沒問題,採集的時候控制一下速度,圖要太快,這樣可以採集久一點。

2. 使用代理ip,網上免費的有一些,不過大部分都不能用,付費的好一些。

3. 使用支持分散式雲採集的爬蟲工具,比如八爪魚採集器,雲採集本身就是相當於很多用戶在不同的電腦上採集數據,速度非常快,也不會有這類封鎖問題。


「網路很好但是有好多頁面都無法打開」

你這多半是把人家網站爬爆了吧。一般不限爬蟲的網站有兩種,一種是公共信息型的非盈利網站。這種出於數據公開、開源等原因基本不限爬蟲。另一種就是小站,別說限制爬蟲,訪問人多了都能宕機。

不管對哪種,PO主行為都可以算得上是DDOS了。伺服器上的PHP或者IIS之類的程序高負載下不穩定然後拋錯。進入這個狀態後,大多數除了只有重啟能解決。對於個人站可能連續幾個星期都沒被站長重啟的話會一直出現訪問障礙


題主在某個回答的評論里這樣說道:

非常感謝回答。該設的都設了。但沒設sleep ,因為爬了幾萬條也不見被封。所以有沒有可能是因為爬的太多而不是爬的太快才這樣?而且連接超時之後是好多其他網站的頁面都很難打開。這樣是不是因為自身區域網的原因因為流量太大受不了啥的。我懂得不多。望多多指教!謝謝

所以基本可以排除對面反爬的可能性,因為沒設sleep,瘋狂並發的話,有反爬的網站不會等他懟個幾萬條才封的,而且題主說的網站打不開是指其他網站的頁面也打不開。

————————分割————————

所以可以這麼考慮

因為爬了幾萬條也不見被封。
但沒設sleep

題主是你是不是爬的什麼小網站,對於毫無反爬的小網站別說用IP池,連UA都可以不加,直接get都行,所以應該不是封IP之類的,但是有可能被爬爆

而且連接超時之後是好多其他網站的頁面都很難打開。

如果是這種情況的話,排除對面的伺服器(不是指你爬的那個,而是其他網站的伺服器)負擔不過來,也排除banIP,因為這兩種情況對你都不應該產生這種影響。

問題應該還是在你身上

比如:如果你是用的requesets,同時滿足以下的條件:

  1. stream參數又被設置成True(不設置流模式的時候requests會自行斷開連接,不存在堆積連接的問題)
  2. 且沒有手動close或者用with語法
  3. 流的解析速度比爬的速度慢(流完全解析完畢後requests也會主動斷開連接)

requests就會一直堆積連接,然後你的網卡、你的路由器、小區的交換機、ISP的伺服器(後面的幾個幾乎不可能,只有前面兩個有可能)就會出現擁塞

又比如:你直接用的python自帶的urllib/urllib2,這貨不會自動斷開連接,必須使用with語法或者手動關閉,否則也會堆積一堆連接,進而導致網路擁塞。

而擁塞的常見處理姿勢就是,優先處理完手上已經堆積的連接,對於後到的直接捨棄,然後你就什麼都打不開了。

又或者是:你的代碼沒有問題,但是對面的網站確實是個小網站並且確實被你爬爆了,然後你的爬蟲維持這一大堆沒有響應的TCP連接

TCP超時就會發生重傳,連續重傳的嘗試間隔會指數增長(不考慮到達TCP_RTO_MAX,因為這個值比較大)

但是重傳時這個TCP連接的資源是不會釋放的,而你又沒設sleep,結果在對面伺服器被爬爆不會給你響應的時候,你又開了一大堆TCP連接,結果又是網路擁塞。

但是事實上,我不知道你是拿的什麼語言做的,也不知道你是用了什麼包做的,請把代碼發上來,這樣才好討論。


反爬了,抓取的數據量少可以設置一個隨機睡眠請求時間,如果數據量大需要一小時1太伺服器達到幾十萬上百萬,則建立ip池,然後調整ip策略(此刻還設置基本的ug ref coo host等,讓爬蟲偽裝成瀏覽器就行了)


先使用代理,看看其他ip能否訪問該網站。

根據經驗來說,那個網站被你搞炸了 相當於dos攻擊


xlzd雜談 - Web Crawler with Python - 07.反爬機制&<1&>(分享自知乎網)
https://zhuanlan.zhihu.com/p/20471442?utm_source=com.meizu.notepaperutm_medium=social


針對你的問題的話,不僅包裹八爪魚,造數和搜數,其實都可以有效規避這個問題


我是用time.sleep()的。你可以看下那個網站的robot.txt。


對單一用戶頻繁訪問的限制,所以就是兩個方面:
1.單一,UA池,cookies池,代理IP池
2.頻繁,控制訪問的速率


請問你設置User-Agent了么?
伺服器很不歡迎非人類。
你也可以使用time.sleep()來降低訪問的頻率或者是使用代理ip


推薦閱讀:

有什麼好的python3爬蟲入門教程或書籍嗎?
python是否可對進行了blob加密的視頻進行爬取操作呢?
爬蟲爬去簡書網站上面文章,get不到,求教原因?
請問這個熱力圖是怎麼製作的呢?
C# 都有哪些爬蟲框架?

TAG:爬蟲計算機網路 | 數據抓取 | 網頁爬蟲 |