劉石磊
摘要:隨著網(wǎng)絡(luò)的發(fā)展和網(wǎng)絡(luò)爬蟲技術(shù)的普及,越來越多的個人用戶使用了網(wǎng)絡(luò)爬蟲技術(shù)從網(wǎng)站獲取信息,而過多的網(wǎng)絡(luò)爬蟲會對目標網(wǎng)站的運營造成一定的影響。某些網(wǎng)站為了防止自己的網(wǎng)站不被除搜索引擎以外的網(wǎng)絡(luò)爬蟲訪問,使用了一些反爬蟲技術(shù)。筆者探討了一些常見的反爬蟲措施以及對應(yīng)用了該類機制的網(wǎng)站的進行爬蟲活動的手段和策略。
關(guān)鍵詞:網(wǎng)絡(luò)爬蟲;反爬蟲;反反爬蟲;抓取策略;分布式爬蟲
1概述
隨著時代的發(fā)展和社會的進步,互聯(lián)網(wǎng)技術(shù)得到了空前的發(fā)展,與此同時,互聯(lián)網(wǎng)容量已經(jīng)達到了一個空前的規(guī)模據(jù)。搜索引擎巨頭Google透露,在2012年時候,Google的網(wǎng)頁爬蟲Google bot每天都會經(jīng)過大約200億個網(wǎng)頁,并且追蹤著約300億個獨立的URL鏈接。此外,Google每個月的搜索請求接近1000億次。而支撐這一切背后的技術(shù),就是網(wǎng)絡(luò)爬蟲技術(shù)。
網(wǎng)絡(luò)爬蟲,通常又被稱作網(wǎng)絡(luò)蜘蛛(Web Spider),是一個可以自動在互聯(lián)網(wǎng)上漫游并可以自動下載網(wǎng)頁的程序或腳本。網(wǎng)絡(luò)爬蟲通常從一個稱為種子集的URL集合開始運行,它首先將這些URL全部放入到一個有序的待爬行隊列里,按照一定的順序從中取出URL并下載所指向的頁面,分析頁面內(nèi)容,提取新的URL并存人待爬行URL隊列中,如此重復(fù)上面的過程,直到URL隊列為空或滿足某個爬行終止條件,從而遍歷Web。該技術(shù)最早應(yīng)用于搜索引擎之中,但是隨著需求的增加和技術(shù)的普及,出現(xiàn)了基于某種特殊目的的個人定制化爬蟲,例如對微博內(nèi)容的爬蟲、對CSDN的爬蟲等。人們?yōu)榱耸占承┬枰男畔ⅲǔㄖ坪米约旱呐老x,并對目標網(wǎng)站進行抓取。
但是,非搜索引擎爬蟲會帶來一些潛在性問題:第一,爬蟲的訪問速度要遠高于正常人類,相應(yīng)的,爬蟲也會占用更多的目標服務(wù)器帶寬,如果大量的用戶都使用了網(wǎng)絡(luò)爬蟲來抓取同一個目標網(wǎng)站,那么海量的、高并發(fā)的非人類用戶會顯著地增加目標網(wǎng)站的服務(wù)器的負載,甚至影響其他正常人類用戶的對目標網(wǎng)站的訪問速度,導(dǎo)致網(wǎng)絡(luò)擁堵。第二,網(wǎng)站的內(nèi)容是網(wǎng)站提供商的收益來源,網(wǎng)絡(luò)供應(yīng)商出于保護數(shù)據(jù)的目的,不希望自己的網(wǎng)站被非搜索引擎之外的爬蟲訪問。因為普通用戶只會訪問網(wǎng)站部分內(nèi)容,而爬蟲會對全站所有的網(wǎng)頁節(jié)點進行掃描,從而遍歷網(wǎng)站中的數(shù)據(jù),降低了網(wǎng)站的競爭力。因此許多網(wǎng)站建立了反爬蟲機制來抵抗網(wǎng)絡(luò)爬蟲。
反爬蟲機制fAnti-Spider),即一系列反爬蟲措施的集合。反爬蟲機制通過預(yù)處理請求頭、封鎖IP、異步加載、使用加密JS算法、設(shè)置驗證碼、等措施達到封鎖爬蟲的目的。本文探討了一些常見的反爬蟲措施以及對應(yīng)用了該類機制的網(wǎng)站的進行爬蟲活動的手段和策略。
2常見的反爬蟲措施
2.1預(yù)處理請求頭
User-agent是HTTP協(xié)議的中的一個字段,其作用是描述發(fā)出HTYP請求的終端的一些信息。服務(wù)器通常通過這個字段來判斷訪問網(wǎng)站的對象。對于每個瀏覽器,訪問網(wǎng)站都會有其固定的user agent,通常以“Mozilla/4.0”開頭,而網(wǎng)絡(luò)爬蟲的User-agent一般為空缺的,或者以“Serapy”、“Python”等常見爬蟲框架/工具的名稱開頭,所以可以做出如下策略:審查訪問的請求頭,如果請求頭是常規(guī)瀏覽器的形式,判定為人類用戶,如果是其他爬蟲框架的形式,則判定為機器人用戶,返回403錯誤,禁止訪問。預(yù)處理請求頭是網(wǎng)站管理者技術(shù)實現(xiàn)最容易,且爬蟲編寫者最容易忽視的技術(shù)。