常見(jiàn)的反爬蟲(chóng)urllib技術(shù)分享
爬蟲(chóng)和反爬的對(duì)抗一直在進(jìn)行著…為了幫助更好的進(jìn)行爬蟲(chóng)行為以及反爬,今天就來(lái)介紹一下網(wǎng)頁(yè)開(kāi)發(fā)者常用的反爬手段。
通過(guò)robots.txt來(lái)限制爬蟲(chóng):
爬蟲(chóng)都遵守著一個(gè)協(xié)議:robots.txt
robots.txt(統(tǒng)一小寫)是一種存放于網(wǎng)站根目錄下的ASCII編碼的文本文件,它通常告訴網(wǎng)絡(luò)搜索引擎的漫游器(又稱網(wǎng)絡(luò)蜘蛛),此網(wǎng)站中的哪些內(nèi)容是不應(yīng)被搜索引擎的漫游器獲取的,哪些是可以被漫游器獲取的。因?yàn)橐恍┫到y(tǒng)中的URL是大小寫敏感的,所以robots.txt的文件名應(yīng)統(tǒng)一為小寫。
robots.txt應(yīng)放置于網(wǎng)站的根目錄下。
如果想單獨(dú)定義搜索引擎的漫游器訪問(wèn)子目錄時(shí)的行為,那么可以將自定的設(shè)置合并到根目錄下的robots.txt,或者使用robots元數(shù)據(jù)(Metadata,又稱元數(shù)據(jù))。
robots.txt協(xié)議并不是一個(gè)規(guī)范,而只是約定俗成的,所以并不能保證網(wǎng)站的隱私。
注意robots.txt是用字符串比較來(lái)確定是否獲取URL,所以目錄末尾有與沒(méi)有斜杠“/”表示的是不同的URL。
robots.txt允許使用類似”Disallow: *.gif”這樣的通配符[1][2]。
解決方法:
這實(shí)際上只是一個(gè)”君子協(xié)議“,遵守與否,都在于爬蟲(chóng)的編寫者。
通過(guò)User-Agent來(lái)控制訪問(wèn):
無(wú)論是瀏覽器還是爬蟲(chóng)程序,在向服務(wù)器發(fā)起網(wǎng)絡(luò)請(qǐng)求的時(shí)候,都會(huì)發(fā)過(guò)去一個(gè)頭文件:headers 這里面的大多數(shù)的字段都是瀏覽器向服務(wù)器”表明身份“用的
對(duì)于爬蟲(chóng)程序來(lái)說(shuō),最需要注意的字段就是:User-Agent
很多網(wǎng)站都會(huì)建立 user-agent白名單,只有屬于正常范圍的user-agent才能夠正常訪問(wèn)。
解決方法:
在發(fā)送請(qǐng)求時(shí)使用該網(wǎng)站user-agent白名單的的UA
可以使用python的第三方模塊fake_useragent 隨機(jī)生成UA,需手動(dòng)安裝
>>> from fake_useragent import FakeUserAgent >>> ua = FakeUserAgent() >>> ua.random 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1866.237 Safari/537.36'
驗(yàn)證碼:
最為經(jīng)典的反爬蟲(chóng)策略當(dāng)屬“驗(yàn)證碼”了。因?yàn)轵?yàn)證碼是圖片,用戶登錄時(shí)只需輸入一次便可登錄成功,而我們程序抓取數(shù)據(jù)過(guò)程中,需要不斷的登
錄,比如我們需要抓取1000個(gè)用戶的個(gè)人信息,則需要填1000次驗(yàn)證碼,而手動(dòng)輸入驗(yàn)證碼是不現(xiàn)實(shí)的,所以驗(yàn)證碼的出現(xiàn)曾經(jīng)難倒了很多網(wǎng)絡(luò)爬蟲(chóng)工程師。
解決方法:
- 分析網(wǎng)站驗(yàn)證碼機(jī)制,從網(wǎng)站后臺(tái)或者前端獲取驗(yàn)證碼(文本形式),該方法只適用于少量網(wǎng)站,因?yàn)橐话泸?yàn)證碼我們很難拿到。
- 利用圖像識(shí)別技術(shù),識(shí)別驗(yàn)證碼文本(例如最近比較火的深度學(xué)習(xí)Tensorflow等)。
- 往往一些網(wǎng)站不只有pc端,還有手機(jī)端網(wǎng)站,很有可能手機(jī)端是不包含驗(yàn)證碼的。所以不妨試試手機(jī)端網(wǎng)站,也許會(huì)有意外收獲
IP限制:
另外一種麻煩的反爬蟲(chóng)策略當(dāng)屬封ip和封賬號(hào)了。本人初期曾經(jīng)用一臺(tái)機(jī)器抓取拉鉤,導(dǎo)致短時(shí)間內(nèi)賬號(hào)被封,IP被封,所以遇到類似問(wèn)題一定要多加小心。
解決方法:
- 最簡(jiǎn)單的解決辦法:限制程序抓取頻率,每隔幾秒登錄一次(如果對(duì)抓取數(shù)量沒(méi)有要求,則可以采用這種方法,如果想抓取大量數(shù)據(jù),還不得抓取到猴年馬月?。?。
- 既然封賬號(hào)封IP,那我就用多個(gè)賬號(hào)、多臺(tái)機(jī)器抓取唄,既解決了反爬蟲(chóng)問(wèn)題,也相當(dāng)于做了分流處理,降低單臺(tái)機(jī)器帶寬壓力。
- 事實(shí)證明,有些網(wǎng)站即使我們采用了1)2)方法,還是會(huì)被封,這種情況下我們只能去抓取代理IP了,可以寫一個(gè)專門的爬蟲(chóng)程序用來(lái)抓取代理,用這些代理去抓取我們想要的數(shù)據(jù)。到此為止,基本上封賬號(hào)、封IP的問(wèn)題就可以解決了。
cookie:
通過(guò)cookie限制抓取信息,比如我們模擬登陸之后,想拿到登陸之后某頁(yè)面信息,千萬(wàn)不要以為模擬登陸之后就所有頁(yè)面都可以抓了,有時(shí)候還需要請(qǐng)求一些中間頁(yè)面拿到特定cookie,然后才可以抓到我們需要的頁(yè)面。
解決方法:
通過(guò)瀏覽器的F12查看器,觀察具體整個(gè)過(guò)程都請(qǐng)求了哪些URL(主要包括HTML、JS、XHR),挨個(gè)試,試到成功為止。
JS渲染:
采用JS渲染頁(yè)面。什么意思呢,就是返回的頁(yè)面并不是直接請(qǐng)求得到,而是有一部分由JS操作DOM得到,所以那部分?jǐn)?shù)據(jù)我們也拿不到咯。
解決方法:
- 可以使用Phantomjs模擬瀏覽器請(qǐng)求返回渲染完JS的頁(yè)面
- 通過(guò)抓包抓取JS渲染的數(shù)據(jù)(不推薦)
以上就是常見(jiàn)的反爬蟲(chóng)urllib技術(shù)分享的詳細(xì)內(nèi)容,更多關(guān)于反爬蟲(chóng)urllib技術(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Web網(wǎng)絡(luò)安全分析Base64注入攻擊原理詳解
這篇文章主要為大家介紹了Web網(wǎng)絡(luò)安全分析Base64注入攻擊原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11Web網(wǎng)絡(luò)安全解析cookie注入攻擊原理
這篇文章主要為大家介紹了Web網(wǎng)絡(luò)安全分析cookie注入攻擊原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11web網(wǎng)絡(luò)安全分析反射型XSS攻擊原理
這篇文章主要為大家介紹了web網(wǎng)絡(luò)安全分析反射型XSS攻擊原理詳細(xì)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11防止絕大部份網(wǎng)頁(yè)病毒的經(jīng)典方法
防止絕大部份網(wǎng)頁(yè)病毒的經(jīng)典方法...2007-02-02系統(tǒng)安全之加密與解密的應(yīng)用技巧與使用方法
系統(tǒng)安全之加密與解密的應(yīng)用技巧與使用方法...2007-08-08網(wǎng)絡(luò)安全流量分析工具蟻劍詳細(xì)介紹
蟻劍(AntSword)是一款開(kāi)源的跨平臺(tái)WebShell管理工具,它主要面向于合法授權(quán)的滲透測(cè)試安全人員以及進(jìn)行常規(guī)操作的網(wǎng)站管理員,蟻劍推崇模塊化的開(kāi)發(fā)思想,遵循開(kāi)源,就要開(kāi)得漂亮的原則,致力于為不同層次的人群提供最簡(jiǎn)單易懂、方便直接的代碼展示及其修改說(shuō)明2022-09-09