網(wǎng)絡(luò)爬蟲(又稱為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò)機(jī)器人,更經(jīng)常的稱為網(wǎng)頁(yè)追逐者),它按照一定的規(guī)則自動(dòng)地抓取網(wǎng)絡(luò)信息。
1. 產(chǎn)生背景
隨著時(shí)代的進(jìn)步,互聯(lián)網(wǎng)上擁有大量的信息,但是我們?cè)撊绾胃咝У墨@取這些信息成為了一個(gè)挑戰(zhàn),傳統(tǒng)的搜索引擎可以幫助我們解決部分問(wèn)題,但是具有一定的局限性:
1) 不同領(lǐng)域、不同背景的用戶往往具有不同的檢索目的和需求,通過(guò)搜索引擎所返回的結(jié)果包含大量用戶不關(guān)心的網(wǎng)頁(yè)。
2) 通用搜索引擎的目標(biāo)是盡可能大的網(wǎng)絡(luò)覆蓋率,有限的搜索引擎服務(wù)器資源與無(wú)限的網(wǎng)絡(luò)數(shù)據(jù)資源之間的矛盾將進(jìn)一步加深。
3) 萬(wàn)維網(wǎng)數(shù)據(jù)形式的豐富和網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,圖片、數(shù)據(jù)庫(kù)、音頻、視頻多媒體等不同數(shù)據(jù)大量出現(xiàn),通用搜索引擎往往對(duì)這些信息含量密集且具有一定結(jié)構(gòu)的數(shù)據(jù)無(wú)能為力,不能很好地發(fā)現(xiàn)和獲取。
4) 通用搜索引擎大多提供基于關(guān)鍵字的檢索,難以支持根據(jù)語(yǔ)義信息提出的查詢
為了解決上述問(wèn)題,定向抓取相關(guān)網(wǎng)頁(yè)資源的聚焦爬蟲應(yīng)運(yùn)而生。聚焦爬蟲是一個(gè)自動(dòng)下載網(wǎng)頁(yè)的程序,它根據(jù)既定的抓取目標(biāo),有選擇的訪問(wèn)萬(wàn)維網(wǎng)上的網(wǎng)頁(yè)與相關(guān)的鏈接,獲取所需要的信息。與通用爬蟲(general purpose web crawler)不同,聚焦爬蟲并不追求大的覆蓋,而將目標(biāo)定為抓取與某一特定主題內(nèi)容相關(guān)的網(wǎng)頁(yè),為面向主題的用戶查詢準(zhǔn)備數(shù)據(jù)資源。
2. 爬蟲的分類
網(wǎng)絡(luò)爬蟲按照系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)技術(shù),大致可以分為以下幾種類型:通用網(wǎng)絡(luò)爬蟲、聚焦網(wǎng)絡(luò)爬蟲、增量式網(wǎng)絡(luò)爬蟲、深層網(wǎng)絡(luò)爬蟲。
1) 通用網(wǎng)絡(luò)爬蟲
通用網(wǎng)絡(luò)爬蟲又稱全網(wǎng)爬蟲,它的爬行范圍和數(shù)量比較龐大,因此對(duì)速度和存儲(chǔ)空間要求比較高,對(duì)于爬行頁(yè)面的順序要求相對(duì)較低,同時(shí)由于待刷新的頁(yè)面太多,通常采用并行工作方式,但需要較長(zhǎng)時(shí)間才能刷新一次頁(yè)面。為提高工作效率,通用網(wǎng)絡(luò)爬蟲會(huì)采取一定的爬行策略,常用的爬行策略有深度優(yōu)先策略和廣度優(yōu)先策略。
2) 聚焦網(wǎng)絡(luò)爬蟲
聚焦網(wǎng)絡(luò)爬蟲,又稱主題網(wǎng)絡(luò)爬蟲,根據(jù)預(yù)定義的主題來(lái)進(jìn)行相關(guān)頁(yè)面的爬取,與通用網(wǎng)絡(luò)爬蟲想必,它的爬取范圍更為精準(zhǔn),會(huì)爬取與主題相關(guān)的頁(yè)面,節(jié)省了硬件和網(wǎng)絡(luò)資源。
3) 增量式網(wǎng)絡(luò)爬蟲
增量式網(wǎng)絡(luò)爬蟲是指對(duì)已下載網(wǎng)頁(yè)采取增量式更新和只爬行新產(chǎn)生的或者已經(jīng)發(fā)生變化網(wǎng)頁(yè)的爬蟲,它能夠在一定程度上保證所爬行的頁(yè)面是盡可能新的頁(yè)面
4) 深層網(wǎng)絡(luò)爬蟲
Web 頁(yè)面按存在方式可以分為表層網(wǎng)頁(yè)和深層網(wǎng)頁(yè),深層網(wǎng)頁(yè)是指大多內(nèi)容不能通過(guò)靜態(tài)獲取,需要用戶提交關(guān)鍵詞才能獲取到隱藏在搜索表單后面的內(nèi)容。Deep Web 爬蟲體系結(jié)構(gòu)包含六個(gè)基本功能模塊 (爬行控制器、解析器、表單分析器、表單處理器、響應(yīng)分析器、LVS 控制器)和兩個(gè)爬蟲內(nèi)部數(shù)據(jù)結(jié)構(gòu)(URL 列表、LVS 表), 其中 LVS(Label Value Set)表示標(biāo)簽/數(shù)值集合,用來(lái)表示填充表單的數(shù)據(jù)源。
3. 爬蟲的基本流程
爬蟲的基本工作流程如下圖:
1) 發(fā)送請(qǐng)求
通過(guò)HTTP庫(kù)向目標(biāo)網(wǎng)站發(fā)送一個(gè)請(qǐng)求,等待響應(yīng)。
2) 獲取響應(yīng)內(nèi)容
服務(wù)器正常響應(yīng)后能得到一個(gè)Response,內(nèi)容為獲取頁(yè)面的內(nèi)容,可能是HTML、Json字符或者二進(jìn)制數(shù)據(jù)等類型。
3) 解析內(nèi)容
得到的內(nèi)容如果是html,可以通過(guò)正則表達(dá)式或網(wǎng)頁(yè)解析庫(kù)進(jìn)行解析,如果是json可以直接轉(zhuǎn)換為json對(duì)象解析,如果是二進(jìn)制數(shù)據(jù)可以保存后作進(jìn)一步處理。
4) 保存數(shù)據(jù)
把解析后的數(shù)據(jù)保存下來(lái),可以是文本,也可以保存到數(shù)據(jù)庫(kù)當(dāng)中。
4. 總結(jié)
本節(jié)我們先進(jìn)行爬蟲的簡(jiǎn)單介紹,爬蟲可以使用Python或者PHP等多種語(yǔ)言,但是大多數(shù)人會(huì)選擇Python來(lái)編寫爬蟲程序,因?yàn)镻ython不僅語(yǔ)法簡(jiǎn)單易上手,它還擁有龐大的開發(fā)者社區(qū)和規(guī)模巨大的模塊庫(kù),是寫爬蟲程序的最好選擇。
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會(huì)語(yǔ)法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程