爬蟲行動被限制,改ip只是其中乙個辦法,對於競爭對手或者目標群體的資料收集,我們樂此不疲。我們的爬蟲行動往往會受到很多限制,以致最終被完全封鎖掉。有什麼方法能避免呢?往下看。
1.驗證碼
我們在很多**會遇到,如果請求量大了之後就會遇到驗證碼的情況。最讓人詬病的12306,其實也是一定程度上的防止非正當請求的產生。
對於驗證碼,可以通過ocr來識別,github上面有很多大神分享的**可以用,可以去看看。
2.headers限制
這應該是最常見的,最基本的反爬蟲手段,主要是初步判斷你是否是真實的瀏覽器在操作。
這個一般很好解決,把瀏覽器中的headers資訊複製上去就ok了。
值得注意的是,很多**只需要useragent資訊就可以通過,但是有的**還需要驗證一些其他的資訊,比如知乎,有一些頁面還需要 authorization 的資訊。所以需要加哪些headers,還需要嘗試,可能還需要referer、accept-encoding等資訊。
3.返回偽造的資訊
這個真的是程式設計師何苦為難程式設計師。反爬蟲的工程師也是煞費苦心,一方面是不讓真實的資料被大規模爬取,另一方面也給你後期的資料處理增加負擔。如果資料偽造的好,可能你真的不容易發現自己爬的是假資料,當然只能依靠你後期去清洗這些資料了。
4.減少返回的資訊
最基本的隱藏真實的資料量,只有不斷載入才能重新整理資訊。還有的就更**,會只給你展示一部分資訊,人都看不到,爬蟲也無能為力。比如cnki,你每次搜尋能夠得到的內容就是非常有限的。這個貌似沒有很好的解決辦法,但是這麼幹的**畢竟是少數,因為這種方式,其實在某種程度上是犧牲了一部分真實使用者的體驗。
5.動態載入
在遇到動態載入的網頁的時候就需要去分析ajax請求,一般情況都能直接找到包含我們想要資料的json檔案。
如果**給檔案加密,那麼可以通過selenium+phantomjs框架,呼叫瀏覽器核心,並利用phantomjs執行js來模擬人為操作以及觸發頁面中的js指令碼。理論上selenium是比較全能的爬蟲方案,因為這個確實算是真實的使用者行為。除非**的反爬蟲嚴苛到寧願誤殺的地步。
6.ip限制
限制ip也是很多**反爬蟲的初衷,有些人隨便寫乙個迴圈,就開始暴力爬取 ,確實會給**伺服器帶來很大的負擔,而這種頻繁的訪問,顯然也不會是真實使用者行為,索性果斷把你封掉。 這種情況,你可以遵守規則,把你爬取的速度變慢,每次爬取停個幾秒就行了。 當然,你也可以通過不斷換ip的形式來繞過這種限制,比如使用覆蓋國內外ip資源的ipidea也可以自己搭乙個ip池,爬到一定的量就切換ip。
爬蟲防封IP
當抓取資料逐漸增大時,伺服器的負荷會加大,會直接封掉來訪ip 採取措施 1.建立請求頭部資訊 建立請求頭 strhtml requests.get url,headers headers 使用get方式,獲取網頁資料 2.我們就只修改user agent還不夠,爬蟲1秒鐘可以抓取很多,通過統計ip的...
防止爬蟲的方法
def limit seconds 1 定義內部方法 def rate limit func def func limit request 設定當前時間 now time.time 獲取首次來訪時間 request time request.session.get req time 0 做減法 in...
基於python的 反反爬蟲手段
coding utf 8 import requests 抓包工具 charles fiddler 引數 1 url,填 引數2 params,後需要新增的引數 引數 3 kwargs,不定長鍵值對引數,一般 key value 在引數3中 headers cookies 或者cookiejar t...