淺談網(wǎng)絡(luò)爬蟲技術(shù)與反爬蟲防護(hù)
?什么是網(wǎng)絡(luò)爬蟲
網(wǎng)絡(luò)爬蟲本質(zhì)上是一段計(jì)算機(jī)程序或腳本,其按照一定的邏輯和算法規(guī)則自動地抓取互聯(lián)網(wǎng)信息。
網(wǎng)絡(luò)爬蟲的分類及技術(shù)原理
網(wǎng)絡(luò)爬蟲按照實(shí)現(xiàn)的技術(shù)和結(jié)構(gòu)可以分為以下幾種類型:通用網(wǎng)絡(luò)爬蟲、聚焦網(wǎng)絡(luò)爬蟲、增量式網(wǎng)絡(luò)爬蟲、深層網(wǎng)絡(luò)爬蟲等。在實(shí)際的網(wǎng)絡(luò)爬蟲中,通常是這幾類爬蟲的組合體。
1、通用網(wǎng)絡(luò)爬蟲(Scalable Web Crawler)
通用網(wǎng)絡(luò)爬蟲又叫作全網(wǎng)爬蟲,爬取的目標(biāo)資源在整個互聯(lián)網(wǎng)上,由于信息量巨大,常用于大型的搜索引擎中。它主要由初始化URL集合、URL隊(duì)列、頁面爬行模塊、頁面分析模塊、數(shù)據(jù)庫等構(gòu)成。具體步驟是首先選取部分種子URL,將這些URL放入待抓取URL隊(duì)列,進(jìn)行循環(huán)提取,一旦滿足停止條件則不再進(jìn)行網(wǎng)絡(luò)爬蟲搜索。通用網(wǎng)絡(luò)爬蟲由于抓取的信息巨大,常使用分布式網(wǎng)絡(luò)爬蟲框架進(jìn)行設(shè)計(jì)實(shí)現(xiàn)。
圖1-1 通用網(wǎng)絡(luò)爬蟲原理及過程?
2、聚焦網(wǎng)絡(luò)爬蟲(Focused Crawler)
聚焦網(wǎng)絡(luò)爬蟲,也叫主題網(wǎng)絡(luò)爬蟲,是指按照預(yù)先定義好的主題,有選擇地進(jìn)行相關(guān)網(wǎng)頁爬取的一種爬蟲。和通用網(wǎng)絡(luò)爬蟲的區(qū)別在于,聚焦網(wǎng)絡(luò)爬蟲在實(shí)施頁面抓取時(shí)會對內(nèi)容進(jìn)行處理篩選,將爬取的目標(biāo)網(wǎng)頁定位在與需求相關(guān)的頁面中。目前爬蟲應(yīng)用中絕大多數(shù)是聚焦爬蟲。
圖1-2 聚焦網(wǎng)絡(luò)爬蟲示例PYTHON代碼
3、增量式網(wǎng)絡(luò)爬蟲(Incremental Web Crawler)
增量式網(wǎng)絡(luò)爬蟲在爬取網(wǎng)頁的時(shí)候只會在需要的時(shí)候爬取新產(chǎn)生或發(fā)生更新的頁面,對于沒有發(fā)生變化的頁面則不會爬取。這樣能有效地減少數(shù)據(jù)下載量并及時(shí)更新已爬取過的網(wǎng)頁,減少時(shí)間和存儲空間上的浪費(fèi),但該算法的復(fù)雜度和實(shí)現(xiàn)難度更高。應(yīng)用場景包括某電商網(wǎng)站會實(shí)時(shí)更新一批最近商品,書籍網(wǎng)站根據(jù)作者創(chuàng)作的進(jìn)度實(shí)時(shí)更新最新的章節(jié)數(shù)據(jù)等,遇到類似的場景時(shí),便可以采用增量式網(wǎng)絡(luò)爬蟲。
為了使爬蟲獲取到的數(shù)據(jù)以增量的形式穩(wěn)定增長,增量爬蟲的核心就是去重。Redis中的Set集合具有天然的去重屬性,所以往往采用的策略是將爬取過程中產(chǎn)生的URL進(jìn)行存儲,存入到Redis中的Set中,當(dāng)下次再爬取的時(shí)候,對在存儲的URL中的Set中進(jìn)行判斷,如果URL存在則不發(fā)起請求,否則就發(fā)起請求。
4、深層網(wǎng)絡(luò)爬蟲
Web頁面按存在方式可以分為表層網(wǎng)頁(Surface Web)和深層網(wǎng)頁(Deep Web)。表層網(wǎng)頁指的直接使用靜態(tài)的超鏈接就可以直接訪問的靜態(tài)頁面。深層網(wǎng)頁指的是那些大部分內(nèi)容不能通過靜態(tài)鏈接獲取的、隱藏在搜索表單后面的,需要用戶提交一些關(guān)鍵詞才能獲得的Web頁面。
反爬蟲
一方面,爬蟲技術(shù)容易造成網(wǎng)站帶寬資源的侵占,有些惡意爬蟲可能會對服務(wù)器發(fā)起Dos攻擊嚴(yán)重導(dǎo)致服務(wù)器癱瘓,另一方面從法律上講,不正當(dāng)?shù)呐老x行為還會造成用戶隱私的泄露,有的甚至導(dǎo)致公司的重要資源被批量爬取,喪失市 場競爭力。在這種背景下,發(fā)展反爬蟲技術(shù)尤為重要。
反爬蟲技術(shù)是使用技術(shù)手段,阻止別人批量獲取自己網(wǎng)站信息的一種方式。技術(shù)關(guān)鍵也在于批量自動化處理。反爬蟲的目標(biāo)是將正常的用戶流量和爬蟲流量進(jìn)行區(qū)分,并阻止爬蟲訪問內(nèi)部真實(shí)數(shù)據(jù)。在實(shí)際反爬蟲的過程中,錯誤的將普通用戶識別為爬蟲被稱為誤傷率。通常來說,攔截率越高的反爬蟲策略,誤傷的可能性就越高,因此需要做權(quán)衡。
反爬蟲技術(shù)手段
針對惡意爬蟲,可通過軟件和硬件兩方面進(jìn)行反爬蟲技術(shù)防護(hù),采取如下措施來識別和阻斷它。
1、軟件方面
1.1 限制User-Agent字段
軟件編碼中User-Agent字段可以攜帶一串包括瀏覽器、操作系統(tǒng)、CPU等用戶設(shè)備信息的字符串,如果請求來自非瀏覽器,就能識別其為爬蟲,阻止爬蟲抓取網(wǎng)站信息。其缺點(diǎn)是攻擊者很容易將爬蟲請求的User-Agent字段偽裝成特定地址輕而易舉繞過這一規(guī)則。
1.2 數(shù)據(jù)加密
前端對一些關(guān)鍵請求參數(shù),如一些用戶信息類,地址類進(jìn)行加密,用加密后的數(shù)據(jù)請求服務(wù)器,這樣網(wǎng)絡(luò)爬蟲由于不知道密鑰,就無法進(jìn)行模擬請求服務(wù)器。
1.3 驗(yàn)證碼
使用驗(yàn)證碼可以防止應(yīng)用或者網(wǎng)站被惡意注冊、攻擊,對于網(wǎng)站、APP而言,大量的無效注冊、重復(fù)注冊甚至是惡意攻擊很令人頭痛。數(shù)字、字母加干擾線、噪點(diǎn),字母重疊擺放,文字點(diǎn)選,滑動拼圖,圖片選擇,點(diǎn)擊驗(yàn)證,鼠標(biāo)軌跡等等,無論何種形式的驗(yàn)證碼,其根本目的都是為了實(shí)現(xiàn)人機(jī)識別,通過交互來驗(yàn)證發(fā)起請求的是人還是機(jī)器。
1.4 使用蜜罐系統(tǒng)
蜜罐最早是來自于網(wǎng)絡(luò)攻防中,主要指防守方故意設(shè)置一個或多個服務(wù)器漏洞,讓攻擊方輕易地入侵進(jìn)來,而這些服務(wù)器一般安裝了監(jiān)控軟件用來監(jiān)控入侵者的一舉一動。
蜜罐技術(shù)作為主動欺騙防御技術(shù)的核心,通過暗設(shè)陷阱,主動誘導(dǎo)攻擊,動態(tài)感知攻擊行為并定位攻擊源,從而可以對攻擊行為進(jìn)行捕獲和分析,推測攻擊意圖和動機(jī)來進(jìn)行防御,保障網(wǎng)絡(luò)的安全運(yùn)行。目前市面上一些主流云服務(wù)系統(tǒng)均搭建了蜜罐系統(tǒng)進(jìn)行反爬蟲防御。
2、硬件方面
2.1 防火墻/服務(wù)器限制IP
爬蟲自動化程序一般對服務(wù)器內(nèi)容的訪問量大,不同于正常用戶,通過在服務(wù)器或者防火墻將訪問量大的IP地址加入黑名單,禁止其訪問。不過限制IP缺點(diǎn)也很明顯,攻擊者可以通過IP代理的方法實(shí)現(xiàn)換IP的目的,來從而避免其IP加入黑名單。
2.2 部署Web應(yīng)用防火墻WAF
WAF是檢測機(jī)器爬蟲流量最常用的硬件產(chǎn)品,常用三種方式:Robot檢測(識別User-Agent)、開啟JS腳本反爬蟲網(wǎng)站反爬蟲(檢查瀏覽器合法性)和CC攻擊防護(hù)(限制IP/Cookie/Referer訪問者對特定路徑訪問頻率),來解決業(yè)務(wù)網(wǎng)站遭受的爬蟲問題。
另外,目前一些云WAF廠商在此基礎(chǔ)上,還提供了智能的反爬蟲模塊,有的產(chǎn)品基于AI分析引擎,通過流量畫像匹配用戶爬蟲,從而建立模型和行為標(biāo)簽,提供爬蟲和IP情報(bào),使用戶快速識別爬蟲行為,從而進(jìn)行相關(guān)的干預(yù)。
風(fēng)險(xiǎn)和挑戰(zhàn)
由于篇幅有限,一些技術(shù)細(xì)節(jié)并未開展詳細(xì)說明。但隨著大數(shù)據(jù)、人工智能時(shí)代的來臨,爬蟲與反爬蟲注定不僅僅是一場無休止的戰(zhàn)斗,而且還越來越具備智能交互、模型分析、決策判斷等技能。這給實(shí)際運(yùn)維帶來新的挑戰(zhàn),我們將持續(xù)關(guān)注該領(lǐng)域發(fā)展,提升抵御網(wǎng)絡(luò)爬蟲風(fēng)險(xiǎn)的各種能力。