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