劉宇 程學(xué)林
摘要:網(wǎng)絡(luò)爬蟲指的是一種按照一定的規(guī)則,自動(dòng)地抓取萬(wàn)維網(wǎng)信息的程序或者腳本。但是實(shí)際上爬蟲還分為正規(guī)爬蟲和非正規(guī)爬蟲,所謂的正規(guī)爬蟲就是通過(guò)正規(guī)途徑和手段獲取網(wǎng)站信息和數(shù)據(jù),非正規(guī)爬蟲又稱為惡意爬蟲,主要用于非法盜竊數(shù)據(jù),給網(wǎng)站服務(wù)器增加負(fù)擔(dān)以及偷窺一些敏感信息數(shù)據(jù)等。本文將會(huì)基于決策樹算法設(shè)計(jì)一種新爬蟲檢測(cè)技術(shù),并根據(jù)爬蟲檢測(cè)結(jié)果提供一些反爬機(jī)制,對(duì)惡意爬蟲進(jìn)行進(jìn)行評(píng)屏蔽等,進(jìn)而實(shí)現(xiàn)對(duì)網(wǎng)站和服務(wù)器以及部分?jǐn)?shù)據(jù),信息的保護(hù),降低互聯(lián)網(wǎng)資源重疊現(xiàn)象。
關(guān)鍵詞:網(wǎng)絡(luò)爬蟲;爬蟲檢測(cè);惡意爬蟲;反爬蟲
0引言
隨著網(wǎng)絡(luò)的迅速發(fā)展,萬(wàn)維網(wǎng)成為大量信息的載體,如何有效地提取并利用這些信息成為一個(gè)巨大的挑戰(zhàn)。為了快速?gòu)幕ヂ?lián)網(wǎng)中獲得大量目標(biāo)數(shù)據(jù),就需要編寫一些腳本程序,按照一定規(guī)律批量獲取數(shù)據(jù),這就是所謂的爬蟲,但是在一部分通過(guò)正常途徑,即先請(qǐng)求網(wǎng)站Robot.tXt之后,再在不影響對(duì)方網(wǎng)站前提下,獲取相關(guān)資料的正規(guī)爬蟲之外,還有一些惡意爬蟲,它們通常表現(xiàn)為無(wú)論網(wǎng)站是的Robot.txt是否允許爬蟲爬取,都會(huì)強(qiáng)制性,批量性獲取網(wǎng)站數(shù)據(jù),同時(shí)會(huì)在短時(shí)間內(nèi)大量的發(fā)起請(qǐng)求,還有一部分惡意爬蟲會(huì)惡意制造虛假PV,模擬點(diǎn)擊付費(fèi)廣告鏈接,批量檢索網(wǎng)站禁止爬蟲爬取信息,用于商業(yè)性質(zhì)分析等。這類爬蟲在給互聯(lián)網(wǎng)帶來(lái)巨大的機(jī)器流量同時(shí),也會(huì)給網(wǎng)站帶來(lái)極大的負(fù)擔(dān),使得網(wǎng)站性能大大降低,目前互聯(lián)網(wǎng)內(nèi)有40%-60%的流量來(lái)自爬蟲或者相關(guān)機(jī)器流量,已經(jīng)嚴(yán)重妨礙核威脅互聯(lián)網(wǎng)相關(guān)的產(chǎn)業(yè)健康發(fā)展!
為了應(yīng)對(duì)爬蟲帶來(lái)的危害,國(guó)內(nèi)外相關(guān)學(xué)者和各大公司企業(yè),教育機(jī)構(gòu)甚至很多個(gè)人網(wǎng)站站長(zhǎng)等,都對(duì)爬蟲檢測(cè),識(shí)別等技術(shù)進(jìn)行了深入的研究,例如目前常見(jiàn)的爬蟲檢測(cè)有判斷請(qǐng)求的Headers,查看請(qǐng)求頻率等眾多方法。但是由于常見(jiàn)的這些檢測(cè)方法并不能靈活快速的檢測(cè)請(qǐng)求類型,所以本文將會(huì)基于決策樹算法建立一種新的爬蟲檢測(cè)方式,同時(shí)做一些相關(guān)的反爬設(shè)計(jì)。
1請(qǐng)求與爬蟲檢測(cè)
對(duì)于網(wǎng)絡(luò)爬蟲的檢測(cè),其實(shí)就是對(duì)請(qǐng)求的分析,一般情況下判斷一個(gè)請(qǐng)求是否是爬蟲,通常是:
(1)單位時(shí)問(wèn)內(nèi)同一IP請(qǐng)求頻率:如果在某一段時(shí)間內(nèi),某個(gè)IP發(fā)出大量請(qǐng)求,而這種請(qǐng)求又不是正常人工可以發(fā)出的(例如一分鐘發(fā)出上千次請(qǐng)求等),那么可以基本判定該請(qǐng)求屬于爬蟲行為;
(2)單位時(shí)間內(nèi)同一IP請(qǐng)求時(shí)間間隔:正常人為訪問(wèn)時(shí),訪問(wèn)時(shí)間間隔是不固定的,但是很多時(shí)候爬蟲的訪問(wèn)時(shí)間間隔是固定的或者在某段時(shí)間范圍內(nèi),如果同一IP每次發(fā)起請(qǐng)求時(shí)間間隔都是在一個(gè)固定時(shí)間間隔內(nèi)或者波動(dòng)范圍極小的時(shí)間間隔內(nèi),那么也可以基本判定該行為屬于爬蟲行為;
(3)User-Agent是否為常用瀏覽器User-Agent:通常情況下每個(gè)瀏覽器具有特定的User.Agent,以讓服務(wù)器識(shí)別該請(qǐng)求是通過(guò)哪個(gè)瀏覽器發(fā)起的,但是很多爬蟲在設(shè)計(jì)時(shí),并未設(shè)置User.Agent,所以如果非常見(jiàn)瀏覽器User-Agent或者帶有編程語(yǔ)言名稱的User-Agent基本可以判定為該行為是爬蟲行為;
(4)請(qǐng)求是否為全部請(qǐng)求:一般情況一個(gè)網(wǎng)站如果有圖片或者link標(biāo)簽等,這樣打開(kāi)一個(gè)網(wǎng)頁(yè)通常會(huì)加載多個(gè)資源,如CSS,Js等,但是爬蟲訪問(wèn)的時(shí)候,通常不會(huì)做這些額外的請(qǐng)求。所以當(dāng)一個(gè)請(qǐng)求發(fā)起之后,只請(qǐng)求了頁(yè)面源代碼而未請(qǐng)求相關(guān)關(guān)聯(lián)資源,那么可以基本判定,該請(qǐng)求是爬蟲行為;
(5)是否請(qǐng)求robot:通常情況,爬蟲都會(huì)請(qǐng)求Robot.txt,而用戶是不會(huì)請(qǐng)求這個(gè)文檔的,所以請(qǐng)求Robot.txt的通常為爬蟲行為,當(dāng)然也是有一部分爬蟲不會(huì)請(qǐng)求該文件的,所以未請(qǐng)求該文檔的并不代表非爬蟲行為;
(6)請(qǐng)求時(shí)是否會(huì)帶有Cookies:一般情況下爬蟲請(qǐng)求頁(yè)面的時(shí)候,都不會(huì)帶有Cookies,而人為訪問(wèn)的時(shí)候,都會(huì)帶有前一頁(yè)面或者前一次訪問(wèn)的Cookies,所以在沒(méi)有前一次Cookies的請(qǐng)求中,有極大可能是爬蟲發(fā)起的請(qǐng)求;
(7)是否觸發(fā)爬蟲陷阱:通常情況下,爬蟲陷阱指的是將Spider訪問(wèn)引入到能產(chǎn)生無(wú)限循環(huán)的頁(yè)面,或者帶人其他特殊頁(yè)面中,正常情況下,人為訪問(wèn)是不會(huì)走人該陷阱的,而爬蟲是“無(wú)思維”請(qǐng)求,所以極有可能會(huì)自動(dòng)走入該陷阱。一般情況下走入該陷阱并在陷阱中無(wú)法跳出的行為是爬蟲行為。endprint