App下載

網(wǎng)站常見(jiàn)反扒方式

猿友 2020-12-18 16:01:38 瀏覽數(shù) (6009)
反饋

今天小編帶大家了解下,網(wǎng)站反爬蟲(chóng)方式,首先先給大家三個(gè)小問(wèn)題,認(rèn)真思考哦!

  • 網(wǎng)站反爬蟲(chóng)方式有哪些
  • 網(wǎng)站為什么要反爬蟲(chóng)
  • 如何應(yīng)付反爬蟲(chóng)   

網(wǎng)站反爬蟲(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, 表明身份,對(duì)于爬蟲(chóng)程序來(lái)說(shuō),最需要注意的字段就是:User-Agent 很多網(wǎng)站都會(huì)建立 User-Agent 白名單,只有屬于正常范圍的 User-Agent 才能夠正常訪問(wèn)。

解決方法:可以自己設(shè)置一下 User-Agent,或者更好的是,可以從一系列的 User-Agent 里隨機(jī)挑出一個(gè)符合標(biāo)準(zhǔn)的使用 。


二、通過(guò) JS 腳本來(lái)防止爬蟲(chóng):  

舉個(gè)例子:如果想爬取某個(gè)網(wǎng)站,在請(qǐng)求之前,它會(huì)有一個(gè)驗(yàn)證頁(yè)面來(lái)驗(yàn)證你是否為爬蟲(chóng)程序。它是怎么實(shí)現(xiàn)的呢?他會(huì)通過(guò) JS 代碼生成一大段隨機(jī)的數(shù)字,然后要求瀏覽器通過(guò) js 的運(yùn)算得出這一串?dāng)?shù)字的和,再返回給服務(wù)器。

解決方法:  使用 PhantomJS !PhantomJS 是一個(gè) Python 包,他可以在沒(méi)有圖形界面的情況下,完全模擬一個(gè)瀏覽器“,JS 腳本驗(yàn)證什么的再也不是問(wèn)題了。


 三、通過(guò)IP限制來(lái)反爬蟲(chóng):  

如果一個(gè)固定的 ip 在短暫的時(shí)間內(nèi),快速大量的訪問(wèn)一個(gè)網(wǎng)站,那自然會(huì)引起注意,管理員可以通過(guò)一些手段把這個(gè) ip 給封了,爬蟲(chóng)程序自然也就做不了什么了。

解決方法:比較成熟的方式是:IP 代理池 簡(jiǎn)單的說(shuō),就是通過(guò) ip 代理,從不同的 ip 進(jìn)行訪問(wèn),這樣就不會(huì)被封掉 ip 了??墒莍p代理的獲取本身就是一個(gè)很麻煩的事情,網(wǎng)上有免費(fèi)和付費(fèi)的,但是質(zhì)量都層次不齊。

如果是企業(yè)里需要的話,可以通過(guò)自己購(gòu)買集群云服務(wù)來(lái)自建代理池。

實(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  


四、通過(guò) robots.txt 來(lái)限制爬蟲(chóng):  

世界上做爬蟲(chóng)最大最好的就是 Google 了,搜索引擎本身就是一個(gè)超級(jí)大的爬蟲(chóng),Google 開(kāi)發(fā)出來(lái)爬蟲(chóng) 24h 不間斷的在網(wǎng)上爬取著新的信息,并返回給數(shù)據(jù)庫(kù),但是這些搜索引擎的爬蟲(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)被搜索引擎的漫游器獲取的,哪些是可以被漫游器獲取的。robots.txt協(xié)議并不是一個(gè)規(guī)范,而只是約定俗成的,所以并不能保證網(wǎng)站的隱私。

注意robots.txt是用字符串比較來(lái)確定是否獲取URL,所以目錄末尾有與沒(méi)有斜杠“/”表示的是不同的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ú)定義搜索引擎的漫游器訪問(wèn)子目錄時(shí)的行為,那么可以將自定的設(shè)置合并到根目錄下的 robots.txt,或者使用 robots 元數(shù)據(jù)(Metadata,又稱元數(shù)據(jù))。

當(dāng)然在特定情況下,比如說(shuō)我們爬蟲(chóng)的獲取網(wǎng)頁(yè)的速度,和人類瀏覽網(wǎng)頁(yè)是差不多的,這并不會(huì)給服務(wù)器造成太大的性能損失,在這種情況下,我們是可以不用恪守 robots 協(xié)議的。


今天的分享內(nèi)容就到這啦。推薦好課:Python3 入門、Python3 進(jìn)階


2 人點(diǎn)贊