張海++劉曉冬
[摘要]網(wǎng)絡(luò)爬蟲是搜索引擎和網(wǎng)站常用的搜索技術(shù),它在為用戶提高高效便利的搜索服務(wù)的同時也產(chǎn)生了大量的網(wǎng)絡(luò)流量,這些大量的網(wǎng)絡(luò)流量既占用了網(wǎng)絡(luò)資源,又對網(wǎng)站性能產(chǎn)生了負面影響。對于內(nèi)容驅(qū)動型網(wǎng)站而言,網(wǎng)絡(luò)爬蟲的造訪是無法避免的,但可以通過分析網(wǎng)絡(luò)爬蟲的特點進而采取相應(yīng)的應(yīng)對措施。
[關(guān)鍵詞]網(wǎng)絡(luò)爬蟲;User-Agent;網(wǎng)絡(luò)策略
[DOI]10.13939/j.cnki.zgsc.2016.23.077
1引言
隨著科技的發(fā)展,大眾正面臨著一種信息爆炸的局面。在巨量數(shù)據(jù)面前,大眾面臨著一種尷尬局面,那就是互聯(lián)網(wǎng)中有大量的對自己有用的數(shù)據(jù),但是怎樣能正確和便捷的獲取到這些數(shù)據(jù)存在著困難。搜索引擎的出現(xiàn)很好地解決了這種局面,讓大眾通過搜索引擎搜索自己想要的數(shù)據(jù)。在互聯(lián)網(wǎng)的搜索引擎和網(wǎng)站中,目前最常用的是網(wǎng)絡(luò)爬蟲技術(shù)。任何事物都有正反兩個面,網(wǎng)絡(luò)爬蟲的出現(xiàn)也印證了這個說法。網(wǎng)絡(luò)爬蟲在給人們提供搜索便利的同時也占用了大量的網(wǎng)絡(luò)帶寬,很多網(wǎng)站的訪問流量構(gòu)成當中,爬蟲帶來的流量要遠遠超過真實用戶訪問流量,甚至爬蟲流量要高出真實流量一個數(shù)量級,因此應(yīng)對網(wǎng)絡(luò)爬蟲是一個值得網(wǎng)站開發(fā)者長期探索和解決的問題。
2網(wǎng)絡(luò)爬蟲概述
網(wǎng)絡(luò)爬蟲也被稱為網(wǎng)絡(luò)機器人,是一種能夠“自動化瀏覽網(wǎng)絡(luò)” 的程序,通過它可以在互聯(lián)網(wǎng)上自動抓取內(nèi)容。它們被廣泛用于互聯(lián)網(wǎng)搜索引擎或其他類似網(wǎng)站,以獲取或更新這些網(wǎng)站的內(nèi)容和檢索方式。它們可以自動采集所有其能夠訪問到的頁面內(nèi)容,以供搜索引擎做進一步處理(分檢整理下載的頁面),而使得用戶能更快的檢索到他們需要的信息。早期的爬蟲主要功能是索引網(wǎng)站中的文本內(nèi)容,隨著技術(shù)的發(fā)展,爬蟲的功能也越來越強,例如對圖片、視屏與內(nèi)容的關(guān)聯(lián),對各種數(shù)據(jù)格式(如doc、xls、pdf)的解析等。
有關(guān)分析數(shù)據(jù)顯示,網(wǎng)站流量中有高達60%可能是由網(wǎng)絡(luò)爬蟲產(chǎn)生的,而這些爬蟲則是由用戶或其他程序控制,并可能模擬人類的Web訪問行為。幾乎所有在線業(yè)務(wù)都可能受到各種類型的爬蟲流量的影響。這可能包括抓取內(nèi)容或價格信息的爬蟲、購買限量供應(yīng)商品及服務(wù)而使合法客戶無法正常購買的“交易”爬蟲、用欺騙手段增加廣告收入的自動“點擊”爬蟲等。另外,因為搜索引擎的流行,網(wǎng)絡(luò)爬蟲實際已經(jīng)成了應(yīng)用很普及的網(wǎng)絡(luò)技術(shù),除了專門做搜索的Google、Yahoo、微軟、百度等公司以外,幾乎每個大型門戶網(wǎng)站都有自己的搜索引擎,除此以外數(shù)量繁多的中小型網(wǎng)站也都有自己的搜索引擎,所以說對于處于互聯(lián)網(wǎng)中的網(wǎng)站來說,受到網(wǎng)絡(luò)爬蟲的光顧是不可避免的。對于一些技術(shù)成熟且智能化水平高的搜索引擎來說,爬蟲的爬取頻率設(shè)置比較合理,對網(wǎng)站資源消耗比較少,但是很多設(shè)計水平差的網(wǎng)絡(luò)爬蟲,其對網(wǎng)頁爬取能力很低,經(jīng)常并發(fā)幾十上百個請求循環(huán)重復(fù)抓取,這種爬蟲對中小型網(wǎng)站的影響往往是致命的,特別是一些缺乏爬蟲編寫經(jīng)驗的程序員寫出來的爬蟲破壞力極強。
3網(wǎng)絡(luò)爬蟲流量的應(yīng)對措施
3.1手工識別拒絕爬蟲的訪問
這種方法主要是針對爬蟲的來源IP進行封堵,通過netstat檢查網(wǎng)站主機的80端口,察看80端口的IP連接數(shù)量,通過連接數(shù)量的多少確認網(wǎng)絡(luò)爬蟲的來源IP,這種方法主要應(yīng)用了網(wǎng)絡(luò)爬蟲并發(fā)連接數(shù)量非常高的特點。在確定來源IP后可以通過防火墻來拒絕網(wǎng)絡(luò)爬蟲對網(wǎng)站的訪問。
3.2通過User-Agent信息識別爬蟲
網(wǎng)絡(luò)爬蟲并不是全部具備高并發(fā)連接的特點,有時候網(wǎng)絡(luò)爬蟲并不會采用高并發(fā)來進行網(wǎng)站內(nèi)容的爬取,這樣一般不容易通過手工方法識別;同時有些網(wǎng)絡(luò)爬蟲來源IP分布范圍很大,很難采取封鎖IP段的手段來解決問題。它們通常采用以爬蟲數(shù)量取勝的方法,即通過大量爬蟲分別有限爬取網(wǎng)頁的辦法,這些小爬蟲單獨爬取的量都不高,所以很難準確識別其IP。這種情況下我們可以通過User-Agent信息來識別爬蟲。這是應(yīng)用了爬蟲在爬取網(wǎng)頁時會聲明自己的User-Agent信息,我們通過分析User-Agent信息來識別爬蟲。這種方法實施簡單效果也非常好,它可以對特定的爬蟲進行封鎖,也可以對編程語言中的HTTP類庫進行封鎖,這樣可以避免無用爬蟲對網(wǎng)站的影響。同時我們還可以采用一種更高級一點的方法在不封鎖特定爬蟲的情況下,通過降低爬蟲的請求頻率來減輕爬蟲對網(wǎng)站性能的影響。
3.3通過網(wǎng)站流量統(tǒng)計系統(tǒng)和日志分析來識別爬蟲
有些爬蟲會通過修改User-Agent信息來偽裝自己,把自己偽裝成一個真實瀏覽器的User-Agent信息。這種情況下我們就無法通過User-Agent信息識別爬蟲了,但是我們可以通過網(wǎng)站流量系統(tǒng)記錄的真實用戶訪問IP來進行識別。
當前主流的網(wǎng)站流量統(tǒng)計系統(tǒng)經(jīng)常采用兩種實現(xiàn)策略:一種策略是在網(wǎng)頁里面嵌入一段JavaScript代碼,這段JavaScript代碼會向特定的統(tǒng)計服務(wù)器發(fā)送請求的方式記錄訪問量;另一種策略是直接分析服務(wù)器日志,來統(tǒng)計網(wǎng)站訪問量。一般情況下,嵌入JavaScript代碼的方式統(tǒng)計的網(wǎng)站流量應(yīng)該高于分析服務(wù)器日志統(tǒng)計的網(wǎng)站流量,這是因為用戶瀏覽器會有緩存,不是每次真實用戶訪問都會觸發(fā)服務(wù)器的處理。
在進行服務(wù)器日志分析時,我們可以采用服務(wù)器日志分析軟件,好的分析軟件可以使我們的分析工作進行的事半功倍。通過日志分析軟件的分析和識別功能,可以對網(wǎng)站的IIS、Apache、Nginx等進行識別和分類分析并給出分析結(jié)果。
通過流量統(tǒng)計系統(tǒng)一般可以得到用戶真實的訪問IP。正常情況下爬蟲是無法執(zhí)行網(wǎng)頁里面的JavaScript代碼片段的。所以我們可以用流量統(tǒng)計系統(tǒng)記錄的IP與服務(wù)器程序日志記錄的IP地址進行比對,如果服務(wù)器日志里面某個IP發(fā)起了大量的請求,在流量統(tǒng)計系統(tǒng)里面卻根本找不到相關(guān)的記錄,或者能找到訪問量卻與服務(wù)器日志里面的統(tǒng)計量出入很大,那么基本可以確定這就是網(wǎng)絡(luò)爬蟲。
3.4通過設(shè)置網(wǎng)絡(luò)策略實現(xiàn)網(wǎng)站實時反爬蟲
通過分析日志的方式來識別網(wǎng)頁爬蟲只是一種被動的防爬蟲方法,它永遠滯后與爬蟲帶來的危害,通過防火墻可以實現(xiàn)一個實時的反爬蟲策略。如果一個惡意爬蟲非要針對某一網(wǎng)站進行蓄謀的爬取,那么它完全可能會采用分布式爬取的策略來進行,比如通過成百上千個代理服務(wù)器對目標網(wǎng)站進行大頻率的爬取,從而導(dǎo)致目標網(wǎng)站無法相應(yīng)正常訪問,那么再進行日志分析解決問題就顯得非常被動和應(yīng)對滯后。所以必須采取實時反爬蟲策略,要能夠動態(tài)的實時識別和封鎖爬蟲的訪問。
4結(jié)論
科學(xué)技術(shù)總是在不停地往前發(fā)展,這些技術(shù)就像矛和盾,總是存在此消彼長的狀態(tài),隨著技術(shù)的進步,攻與防的戰(zhàn)斗也在向縱深發(fā)展。對于網(wǎng)絡(luò)爬蟲不能只是一味地封堵,比較可行的方法是進行疏堵結(jié)合,通過更全面的超越簡單攔截的多樣化策略,更好地控制爬蟲流量,將其負面效應(yīng)減到最低狀態(tài)。
參考文獻:
[1]詹恒飛,楊岳湘,方宏.Nutch分布式網(wǎng)絡(luò)爬蟲研究與優(yōu)化[J],計算機科學(xué)與探索,2011(1).
[2]李紀欣,王康,周立發(fā),等.Google Protobuf在Linux Socket通訊中的應(yīng)用[J],電腦開發(fā)與應(yīng)用,2013(4).