今天小編帶大家了解下,網(wǎng)站反爬蟲方式,首先先給大家三個(gè)小問題,認(rèn)真思考哦!
- 網(wǎng)站反爬蟲方式有哪些
- 網(wǎng)站為什么要反爬蟲
- 如何應(yīng)付反爬蟲
網(wǎng)站反爬蟲方式:
一、通過 User-Agent 來控制訪問:
無論是瀏覽器還是爬蟲程序,在向服務(wù)器發(fā)起網(wǎng)絡(luò)請(qǐng)求的時(shí)候,都會(huì)發(fā)過去一個(gè)頭文件:headers, 表明身份,對(duì)于爬蟲程序來說,最需要注意的字段就是:User-Agent 很多網(wǎng)站都會(huì)建立 User-Agent 白名單,只有屬于正常范圍的 User-Agent 才能夠正常訪問。
解決方法:可以自己設(shè)置一下 User-Agent,或者更好的是,可以從一系列的 User-Agent 里隨機(jī)挑出一個(gè)符合標(biāo)準(zhǔn)的使用 。
二、通過 JS 腳本來防止爬蟲:
舉個(gè)例子:如果想爬取某個(gè)網(wǎng)站,在請(qǐng)求之前,它會(huì)有一個(gè)驗(yàn)證頁(yè)面來驗(yàn)證你是否為爬蟲程序。它是怎么實(shí)現(xiàn)的呢?他會(huì)通過 JS 代碼生成一大段隨機(jī)的數(shù)字,然后要求瀏覽器通過 js 的運(yùn)算得出這一串?dāng)?shù)字的和,再返回給服務(wù)器。
解決方法: 使用 PhantomJS !PhantomJS 是一個(gè) Python 包,他可以在沒有圖形界面的情況下,完全模擬一個(gè)瀏覽器“,JS 腳本驗(yàn)證什么的再也不是問題了。
三、通過IP限制來反爬蟲:
如果一個(gè)固定的 ip 在短暫的時(shí)間內(nèi),快速大量的訪問一個(gè)網(wǎng)站,那自然會(huì)引起注意,管理員可以通過一些手段把這個(gè) ip 給封了,爬蟲程序自然也就做不了什么了。
解決方法:比較成熟的方式是:IP 代理池 簡(jiǎn)單的說,就是通過 ip 代理,從不同的 ip 進(jìn)行訪問,這樣就不會(huì)被封掉 ip 了??墒莍p代理的獲取本身就是一個(gè)很麻煩的事情,網(wǎng)上有免費(fèi)和付費(fèi)的,但是質(zhì)量都層次不齊。
如果是企業(yè)里需要的話,可以通過自己購(gòu)買集群云服務(wù)來自建代理池。
實(shí)現(xiàn)方式如下:
def get_ip_poll():
'''
模擬代理池 返回一個(gè)字典類型的鍵值對(duì),
'''
ip_poll = ["http://xx.xxx.xxx.xxx:9999",
"http://xx.xxx.xxx.xxx:8000",
"http://xx.xxx.xxx.xxx:8080",
"http://xx.xxx.xxx.xxx:9922",
"http://xx.xxx.xxx.xxx:8090"]
addresses = {}
addresses['http'] = ip_poll[random.randint(0, len(ip_poll))]
return addresses
四、通過 robots.txt 來限制爬蟲:
世界上做爬蟲最大最好的就是 Google 了,搜索引擎本身就是一個(gè)超級(jí)大的爬蟲,Google 開發(fā)出來爬蟲 24h 不間斷的在網(wǎng)上爬取著新的信息,并返回給數(shù)據(jù)庫(kù),但是這些搜索引擎的爬蟲都遵守著一個(gè)協(xié)議:robots.txt robots.txt(統(tǒng)一小寫)是一種存放于網(wǎng)站根目錄下的 ASCII 編碼的文本文件,它通常告訴網(wǎng)絡(luò)搜索引擎的漫游器(又稱網(wǎng)絡(luò)蜘蛛),此網(wǎng)站中的哪些內(nèi)容是不應(yīng)被搜索引擎的漫游器獲取的,哪些是可以被漫游器獲取的。robots.txt協(xié)議并不是一個(gè)規(guī)范,而只是約定俗成的,所以并不能保證網(wǎng)站的隱私。
注意robots.txt是用字符串比較來確定是否獲取URL,所以目錄末尾有與沒有斜杠“/”表示的是不同的URL。
robots.txt 允許使用類似"Disallow: *.gif"這樣的通配符[1][2]。因?yàn)橐恍┫到y(tǒng)中的 URL 是大小寫敏感的,所以 robots.txt 的文件名應(yīng)統(tǒng)一為小寫。robots.txt 應(yīng)放置于網(wǎng)站的根目錄下。如果想單獨(dú)定義搜索引擎的漫游器訪問子目錄時(shí)的行為,那么可以將自定的設(shè)置合并到根目錄下的 robots.txt,或者使用 robots 元數(shù)據(jù)(Metadata,又稱元數(shù)據(jù))。
當(dāng)然在特定情況下,比如說我們爬蟲的獲取網(wǎng)頁(yè)的速度,和人類瀏覽網(wǎng)頁(yè)是差不多的,這并不會(huì)給服務(wù)器造成太大的性能損失,在這種情況下,我們是可以不用恪守 robots 協(xié)議的。
今天的分享內(nèi)容就到這啦。推薦好課:Python3 入門、Python3 進(jìn)階。