1 前言
作為一名職業(yè)的爬蟲(chóng)工程師驼壶,每天面對(duì)的就是要和目標(biāo)網(wǎng)站后方的反爬蟲(chóng)工程師斗智斗勇罚拟,似乎頗有一種攻城拔寨的感覺(jué)悄雅,在終于突破層層阻礙之后驱敲,“200 OK”將會(huì)到來(lái)。
在關(guān)于反反爬的第一篇文章宽闲,我將根據(jù)我的經(jīng)驗(yàn)众眨,先介紹一下基于Headers反爬握牧、基于用戶行為反爬,及其相對(duì)應(yīng)的反反爬手段娩梨。
2 正文
基于Headers反爬
對(duì)所有請(qǐng)求的Headers進(jìn)行檢查是反爬的第一步沿腰,一般情況下,網(wǎng)站的工程師會(huì)對(duì)所有請(qǐng)求的頭部進(jìn)行檢查姚建,疑似爬蟲(chóng)的請(qǐng)求都將被丟棄或返回400矫俺。常見(jiàn)的檢查項(xiàng)有:User-Agent、Referer和其他掸冤。
【User-Agent】:對(duì)User-Agent的檢查一般是為了鑒別請(qǐng)求發(fā)出使用的工具厘托,比如默認(rèn)情況下Python requests發(fā)出的請(qǐng)求中User-Agent字段都是Python的版本信息,Curl發(fā)出的請(qǐng)求中User-Agent字段都是Curl版本信息等稿湿,反爬人員只要對(duì)其進(jìn)行匹配铅匹,就可以篩掉爬蟲(chóng)程序,正常的用戶肯定不是使用這些工具來(lái)訪問(wèn)頁(yè)面的饺藤,不是么包斑。
應(yīng)對(duì)手段:要避免被反爬人員識(shí)別我們的爬蟲(chóng)程序,那就要進(jìn)行User-Agent的偽裝涕俗,幾乎所有可以發(fā)出HTTP請(qǐng)求的工具都可以指定Headers罗丰,比如Python requests模塊,在get或者post時(shí)再姑,可指定Headers萌抵。常用的辦法是(這也是我剛Get到的),構(gòu)建一個(gè)UA數(shù)組元镀,每次請(qǐng)求由程序隨機(jī)獲取UA绍填。如下。
如果上面的辦法還是不奏效的話栖疑,那就要祭出大招了讨永,將UA的參數(shù)改為“Baiduspider+”,基本就妥了遇革。(hahaha)
【Referer】:一般對(duì)Referer檢查的不對(duì)卿闹,但是有一些為了防止盜鏈,會(huì)對(duì)部分頁(yè)面進(jìn)行Referer的判斷澳淑,比如比原,頁(yè)面A只能從頁(yè)面B點(diǎn)擊過(guò)來(lái),沒(méi)有其他途徑杠巡,那么你的Headers中顯示從頁(yè)面C過(guò)來(lái)量窘,那保不齊就給你400了。
應(yīng)對(duì)手段:在進(jìn)行協(xié)議模擬和協(xié)議仿真的時(shí)候氢拥,多留點(diǎn)心蚌铜。出錯(cuò)了看看瀏覽器真實(shí)訪問(wèn)的Referer锨侯,copy過(guò)來(lái)嘛。
【其他】:有一些站點(diǎn)冬殃,是會(huì)構(gòu)建特殊參數(shù)在Headers里面囚痴,如果沒(méi)有這些參數(shù)就不能正常返回。
應(yīng)對(duì)手段:這些參數(shù)有可能是固定的审葬,也有可能是上下文獲取的或計(jì)算得到的深滚,這就需要更多的經(jīng)驗(yàn)和仔細(xì)的分析了。如果是固定的那照抄就好涣觉,如果是上下文傳過(guò)來(lái)的痴荐,那分析上下文找到參數(shù)的來(lái)源再模擬即可。如果是計(jì)算得來(lái)的官册,那就屬于比較難處理的一種了生兆,需要分析和跟蹤JS代碼獲取參數(shù)的計(jì)算方法,這一部分后面的文章再講吧膝宁。
基于用戶行為
基于用戶行為是個(gè)大的分類鸦难,里面包括很多種反爬手段,比如某賬號(hào)頻繁多次訪問(wèn)员淫,比如前端判斷輸入密碼是的姿勢(shì)不對(duì)(支付寶判斷輸入賬戶密碼不符合人類行為會(huì)不予登錄合蔽,比如輸入過(guò)快,在使用selenium模擬瀏覽器操作時(shí)會(huì)遇到類似問(wèn)題)介返,比如某IP頻繁訪問(wèn)等等辈末。這里主要要介紹的是反爬人員針對(duì)IP進(jìn)行篩選,屏蔽頻繁訪問(wèn)的IP地址這種手段映皆。
經(jīng)過(guò)潛伏在反爬陣營(yíng)里的小伙伴透露,在反爬人員觀察后端數(shù)據(jù)時(shí)轰枝,有時(shí)會(huì)看到同一個(gè)IP短時(shí)間里的訪問(wèn)請(qǐng)求UA一直在變捅彻。然后他就把這個(gè)IP加到了黑名單。
這個(gè)UA一直變的鞍陨,應(yīng)該是用到了我們前面說(shuō)到的隨機(jī)UA的方案步淹,但是,反爬人員又看到IP是不變的诚撵,便將其判定為爬蟲(chóng)程序缭裆。那如果我們的訪問(wèn)IP也是一直變化啊的呢。
將將將將~
今天的主角出場(chǎng)【HTTP(S)代理】寿烟。
HTTP代理:使用代理客戶機(jī)進(jìn)行http訪問(wèn)澈驼,主要代理瀏覽器訪問(wèn)網(wǎng)頁(yè)。
主要的功能有:
1.突破自身IP訪問(wèn)限制筛武,訪問(wèn)國(guó)外站點(diǎn)缝其。
2.訪問(wèn)一些單位或團(tuán)體內(nèi)部資源挎塌,如某大學(xué)FTP
3.提高訪問(wèn)速度:通常代理服務(wù)器都設(shè)置一個(gè)較大的硬盤(pán)緩沖區(qū),當(dāng)有外界的信息通過(guò)時(shí)内边,同時(shí)也將其保存到緩沖區(qū)中榴都,當(dāng)其他用戶再訪問(wèn)相同的信息時(shí), 則直接由緩沖區(qū)中取出信息漠其,傳給用戶嘴高,以提高訪問(wèn)速度。
4.隱藏真實(shí)IP:上網(wǎng)者也可以通過(guò)這種方法隱藏自己的IP和屎,免受攻擊拴驮。
From 百度百科
我們要用到的就是通過(guò)代理服務(wù)器訪問(wèn)目標(biāo)站點(diǎn)以達(dá)到隱藏真實(shí)IP的目的。
目前我們用來(lái)做爬蟲(chóng)的工具基本都是支持通過(guò)配置代理訪問(wèn)的眶俩,比如使用Python requests莹汤,在get/post請(qǐng)求通過(guò)參數(shù)proxies配置HTTP代理進(jìn)行訪問(wèn),遠(yuǎn)端將無(wú)法辨別你的真實(shí)地址(指匿名代理颠印,該場(chǎng)景不使用透明代理)纲岭。如下:
所以在工作中,我們可能需要大量可用的HTTP代理資源线罕。當(dāng)然止潮,萬(wàn)能的某寶一定是有賣的,但是要么質(zhì)量不好钞楼,要么賣得太貴喇闸。
于是,我用爬蟲(chóng)爬取了網(wǎng)上大量的可用代理询件,并定時(shí)進(jìn)行可用性驗(yàn)證燃乍,生成了自己的高可用高匿HTTP(S)代理池。
有福同享宛琅,我將我的爬蟲(chóng)部署在了百度云服務(wù)器刻蟹,然后由微信公眾號(hào)訪問(wèn)獲得并下發(fā)給各位。
現(xiàn)在嘿辟,只要關(guān)注 燕幕自安舆瘪,在后臺(tái)回復(fù)代理即可獲得最新更新的10條高匿代理資源。如果你需要更大量的數(shù)據(jù)红伦,請(qǐng)私下與我聯(lián)系英古。
對(duì)于HTTPS代理是否有效,可以在百度搜索 ip 進(jìn)行測(cè)試昙读。如下召调。
3 最后
關(guān)于反反爬我會(huì)根據(jù)自己的成長(zhǎng)和經(jīng)驗(yàn)一直寫(xiě)下去,希望感興趣的朋友關(guān)注。
重申一下:在后臺(tái)回復(fù)代理即可獲得最新更新的10條高匿代理資源某残。另外国撵,回復(fù)目錄可看到提供的各項(xiàng)功能。
Over~
非經(jīng)過(guò)本人同意玻墅,嚴(yán)禁轉(zhuǎn)載介牙。
如有問(wèn)題,請(qǐng)關(guān)注公眾號(hào)回復(fù)【作者】獲取我的聯(lián)系方式澳厢。