爬蟲行動被限制?一招破解!

太陽小諸葛發表於2018-11-13

爬蟲行動被限制,改換ip只是其中一個辦法
知己知彼百戰不殆,對於競爭對手或者目標消費群體的資料收集,我們樂此不疲。在ip代理盛行的今天,爬蟲技術已經可以被我們充分發揮,海量收集資料,毫不手軟。如果不用代理ip,我們的爬蟲行動往往會受到很多限制,以致最終被完全封鎖掉。有什麼方法能避免呢?往下看。

1.驗證碼
我們在很多網站會遇到,如果請求量大了之後就會遇到驗證碼的情況。最讓人詬病的12306,其實也是一定程度上的防止非正當請求的產生。
對於驗證碼,可以透過OCR來識別圖片,Github上面有很多大神分享的程式碼可以用,可以去看看。

2.Headers限制
這應該是最常見的,最基本的反爬蟲手段,主要是初步判斷你是否是真實的瀏覽器在操作。
這個一般很好解決,把瀏覽器中的Headers資訊複製上去就OK了。
值得注意的是,很多網站只需要userAgent資訊就可以透過,但是有的網站還需要驗證一些其他的資訊,比如知乎,有一些頁面還需要 authorization 的資訊。所以需要加哪些Headers,還需要嘗試,可能還需要Referer、Accept-encoding等資訊。

3.返回偽造的資訊
這個真的是程式設計師何苦為難程式設計師。反爬蟲的工程師也是煞費苦心,一方面是不讓真實的資料被大規模爬取,另一方面也給你後期的資料處理增加負擔。如果資料偽造的好,可能你真的不容易發現自己爬的是假資料,當然只能依靠你後期去清洗這些資料了。

4.減少返回的資訊
最基本的隱藏真實的資料量,只有不斷載入才能重新整理資訊。還有的就更變態,會只給你展示一部分資訊,人都看不到,爬蟲也無能為力。比如CNKI,你每次搜尋能夠得到的內容就是非常有限的。這個貌似沒有很好的解決辦法,但是這麼幹的網站畢竟是少數,因為這種方式,其實在某種程度上是犧牲了一部分真實使用者的體驗。

5.動態載入
透過非同步載入,一方面是為了反爬蟲,一方面也可以給網頁瀏覽帶來不同的體驗,實現更多的功能。很多動態網站都是透過ajax或者JavaScript來載入請求的網頁。
在遇到動態載入的網頁的時候就需要去分析ajax請求,一般情況都能直接找到包含我們想要資料的json檔案。
如果網站給檔案加密,那麼可以透過selenium+phantomJS框架,呼叫瀏覽器核心,並利用phantomJS執行js來模擬人為操作以及觸發頁面中的js指令碼。理論上selenium是比較全能的爬蟲方案,因為這個確實算是真實的使用者行為。除非網站的反爬蟲嚴苛到寧願誤殺的地步。

6.IP限制
限制IP也是很多網站反爬蟲的初衷,有些人隨便寫一個迴圈,就開始暴力爬取 ,確實會給網站伺服器帶來很大的負擔,而這種頻繁的訪問,顯然也不會是真實使用者行為,索性果斷把你封掉。
這種情況,你可以遵守規則,把你爬取的速度變慢,每次爬取停個幾秒就行了。
time.sleep(5)1
當然,你也可以透過不斷換IP的形式來繞過這種限制,網上很多免費的IP資源,你可以自己搭一個IP池,爬到一定的量就切換IP。付費資源則可以選擇一些換IP軟體比如太陽ip軟體來幫助自己完成。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31561288/viewspace-2219785/,如需轉載,請註明出處,否則將追究法律責任。

相關文章