爬蟲遇到網頁攔截腫麼辦

本人學爬蟲一段時間,爬的都是簡單的網頁。但忽然有一天爬網頁被攔截,不知如何是好,問度娘上百次,總結了一下經驗瀏覽器

在訪問網頁的時候被攔截,封你的IP,登陸驗證等手段不讓爬客們得逞,可是道高一尺,魔高一丈。我開始研習突破反爬蟲限制的功法服務器

1.假裝流浪器報頭cookie

      不少服務器經過瀏覽器發給它的報頭來確認是不是人類用戶,因此咱們能夠經過模仿瀏覽器的行爲構造請求報頭給服務器發送請求。服務器會識別其中的一些參數來識別你是不是人類用戶,不少網站都會識別User-Agent這個參數,因此請求頭最好帶上。有一些警覺性比較高的網站可能還會經過其餘參數識別,好比經過Accept-Language來辨別你是不是人類用戶,一些有防盜鏈功能的網站還得帶上referer這個參數等等。網絡

      2.隨機生成UAide

      只需帶User-Agent這個參數就能夠抓取頁面信息了,不過連續抓取幾頁就被服務器阻止了。因而決定每次抓取數據時模擬不一樣的瀏覽器發送請求,而服務器經過User-Agent來識別不一樣瀏覽器,因此每次爬取頁面能夠經過隨機生成不一樣的UA構造報頭去請求服務器,測試

      3.減慢爬取速度網站

      雖然模擬了不一樣瀏覽器爬取數據,但發現有的時間段能夠爬取上百頁的數據,有時候卻只能爬取十來頁,看來服務器還會根據你的訪問的頻率來識別你是人類用戶仍是網絡爬蟲。因此我每抓取一頁都讓它隨機休息幾秒,加入此句代碼後,每一個時間段都能爬取大量股票數據了。ui

      4.使用代理IPspa

      天有不測風雲,程序在公司時順利測試成功,回寢室後發現又只能抓取幾頁就被服務器阻止了。惶恐不安的我趕忙詢問度娘,獲知服務器能夠識別你的IP,並記錄此IP訪問的次數,可使用高匿的代理IP,並在抓取的過程當中不斷的更換,讓服務器沒法找出誰是真兇。此功還未修成,欲知後事如何,請聽下回分解。3d

      5.其餘突破反爬蟲限制的方法

      不少服務器在接受瀏覽器請求時會發送一個cookie文件給瀏覽器,而後經過cookie來跟蹤你的訪問過程,爲了避免讓服務器識別出你是爬蟲,建議最好帶上cookie一塊兒去爬取數據;若是趕上要模擬登錄的網站,爲了避免讓本身的帳號被拉黑,能夠申請大量的帳號,而後再爬入,此處涉及模擬登錄、驗證碼識別等知識,暫時再也不深究...總之,對於網站主人來講,有些爬蟲確實是使人討厭的,因此會想出不少方法限制爬蟲的進入,因此咱們在強行進入以後也得注意些禮儀,別把人家的網站給拖垮了。

舉個登陸知乎的代碼例子:

#encoding:utf8
import requests
from lxml import etree
import re
dai = ['175.155.25.20:808'] #代理ip
head = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"} #頭的信息

cookie = {'Cookie':'q_c1=42980743158c4aab9d8111f90172ec69|1490747011000|1490747011000; r_cap_id="ZTIxNTU3YWE3NjNmNDY1YmI1NDc2ZTFkZWM4ZWYyNDI=|1493277797|377fb0c22c8ac4f0dd192742d2c7e74f876f4b1b"; cap_id="ZjIwM2NlYTJhOWNiNDIxZjg0NDBkYzEyNTZlZTk3ZWM=|1493277797|cc27229fb1908723c6a19c8acc8f83fc181770a4"; capsion_ticket="2|1:0|10:1492830337|14:capsion_ticket|44:MjJiMTFmNjNlZTVlNDdmMjk3YzAxNjZmMzkwMjkyYmQ=|cfc0184334508f233cda25a1549f9ab8ff3abd2bcde0eb00d57d561b3d37da71"; aliyungf_tc=AQAAAKV5ZgOXbQsAAtD5cpIi0/Ex8fux; acw_tc=AQAAAOfo2CFxJQ0AAtD5cms3yXOcEGH+; _xsrf=aec21e958db4d4c03ed5ba3245ce3eca; d_c0="AJACY2OmqwuPTikw3aZFLtfreGDGHsZiGRw=|1493277794"; l_n_c=1; __utma=51854390.267103839.1493278142.1493278142.1493278142.1; __utmb=51854390.0.10.1493278142; __utmc=51854390; __utmz=51854390.1493278142.1.1.utmcsr=zhihu.com|utmccn=(referral)|utmcmd=referral|utmcct=/; __utmv=51854390.000--|3=entry_date=20170329=1; _zap=dbcdd0ce-8192-4652-a8b0-dc163795627b; z_c0=Mi4wQUNBQ2R4Umlxd3NBa0FKalk2YXJDeGNBQUFCaEFsVk45Q2twV1FEMmF2aVlHeFpSNlE4bE15YnFyU2xfT0Z2cE1R|1493277941|74ef22a4df0a689b9eb43adcba977aebd9d165e5'}

te = requests.get('https://www.zhihu.com/#signin',cookies=cookie,headers=head,proxies=dai).text
demo = re.compile('<span class="Guide-BioEditorBio">(.*?)</span>',re.S)
aa = demo.findall(te)
print(aa)
相關文章
相關標籤/搜索