網(wǎng)絡(luò)爬蟲原理
網(wǎng)絡(luò)爬蟲是捜索引擎抓取系統(tǒng)的重要組成部分。爬蟲的主要目的是將互聯(lián)網(wǎng)上的網(wǎng)頁(yè)下載到本地形成一個(gè)或聯(lián)網(wǎng)內(nèi)容的鏡像備份。這篇博客主要對(duì)爬蟲以及抓取系統(tǒng)進(jìn)行一個(gè)簡(jiǎn)單的概述。
一、網(wǎng)絡(luò)爬蟲的基本結(jié)構(gòu)及工作流程
??? 一個(gè)通用的網(wǎng)絡(luò)爬蟲的框架如圖所示:
??? 網(wǎng)絡(luò)爬蟲的基本工作流程如下:
??? 1.首先選取一部分精心挑選的種子URL;
??? 2.將這些URL放入待抓取URL隊(duì)列;
??? 3.從待抓取URL隊(duì)列中取出待抓取在URL,解析DNS,并且得到主機(jī)的ip,并將URL對(duì)應(yīng)的網(wǎng)頁(yè)下載下來(lái),存儲(chǔ)進(jìn)已下載網(wǎng)頁(yè)庫(kù)中。此外,將這些URL放進(jìn)已抓取URL隊(duì)列。
??? 4.分析已抓取URL隊(duì)列中的URL,分析其中的其他URL,并且將URL放入待抓取URL隊(duì)列,從而進(jìn)入下一個(gè)循環(huán)。
二、從爬蟲的角度對(duì)互聯(lián)網(wǎng)進(jìn)行劃分
??? 對(duì)應(yīng)的,可以將互聯(lián)網(wǎng)的所有頁(yè)面分為五個(gè)部分:
??? 1.已下載未過(guò)期網(wǎng)頁(yè)
??? 2.已下載已過(guò)期網(wǎng)頁(yè):抓取到的網(wǎng)頁(yè)實(shí)際上是互聯(lián)網(wǎng)內(nèi)容的一個(gè)鏡像與備份,互聯(lián)網(wǎng)是動(dòng)態(tài)變化的,一部分互聯(lián)網(wǎng)上的內(nèi)容已經(jīng)發(fā)生了變化,這時(shí),這部分抓取到的網(wǎng)頁(yè)就已經(jīng)過(guò)期了。
??? 3.待下載網(wǎng)頁(yè):也就是待抓取URL隊(duì)列中的那些頁(yè)面
??? 4.可知網(wǎng)頁(yè):還沒(méi)有抓取下來(lái),也沒(méi)有在待抓取URL隊(duì)列中,但是可以通過(guò)對(duì)已抓取頁(yè)面或者待抓取URL對(duì)應(yīng)頁(yè)面進(jìn)行分析獲取到的URL,認(rèn)為是可知網(wǎng)頁(yè)。
??? 5.還有一部分網(wǎng)頁(yè),爬蟲是無(wú)法直接抓取下載的。稱為不可知網(wǎng)頁(yè)。
三、抓取策略
??? 在爬蟲系統(tǒng)中,待抓取URL隊(duì)列是很重要的一部分。待抓取URL隊(duì)列中的URL以什么樣的順序排列也是一個(gè)很重要的問(wèn)題,因?yàn)檫@涉及到先抓取那個(gè)頁(yè)面,后抓取哪個(gè)頁(yè)面。而決定這些URL排列順序的方法,叫做抓取策略。下面重點(diǎn)介紹幾種常見(jiàn)的抓取策略:
??? 1.深度優(yōu)先遍歷策略
深度優(yōu)先遍歷策略是指網(wǎng)絡(luò)爬蟲會(huì)從起始頁(yè)開(kāi)始,一個(gè)鏈接一個(gè)鏈接跟蹤下去,處理完這條線路之后再轉(zhuǎn)入下一個(gè)起始頁(yè),繼續(xù)跟蹤鏈接。我們以下面的圖為例:
??? 遍歷的路徑:A-F-G? E-H-I B C D
??? 2.寬度優(yōu)先遍歷策略
??? 寬度優(yōu)先遍歷策略的基本思路是,將新下載網(wǎng)頁(yè)中發(fā)現(xiàn)的鏈接直接插入待抓取URL隊(duì)列的末尾。也就是指網(wǎng)絡(luò)爬蟲會(huì)先抓取起始網(wǎng)頁(yè)中鏈接的所有網(wǎng)頁(yè),然后再選擇其中的一個(gè)鏈接網(wǎng)頁(yè),繼續(xù)抓取在此網(wǎng)頁(yè)中鏈接的所有網(wǎng)頁(yè)。還是以上面的圖為例:
??? 遍歷路徑:A-B-C-D-E-F G H I
??? 3.反向鏈接數(shù)策略
??? 反向鏈接數(shù)是指一個(gè)網(wǎng)頁(yè)被其他網(wǎng)頁(yè)鏈接指向的數(shù)量。反向鏈接數(shù)表示的是一個(gè)網(wǎng)頁(yè)的內(nèi)容受到其他人的推薦的程度。因此,很多時(shí)候搜索引擎的抓取系統(tǒng)會(huì)使用這個(gè)指標(biāo)來(lái)評(píng)價(jià)網(wǎng)頁(yè)的重要程度,從而決定不同網(wǎng)頁(yè)的抓取先后順序。
??? 在真實(shí)的網(wǎng)絡(luò)環(huán)境中,由于廣告鏈接、作弊鏈接的存在,反向鏈接數(shù)不能完全等他我那個(gè)也的重要程度。因此,搜索引擎往往考慮一些可靠的反向鏈接數(shù)。
??? 4.Partial PageRank策略
??? Partial PageRank算法借鑒了PageRank算法的思想:對(duì)于已經(jīng)下載的網(wǎng)頁(yè),連同待抓取URL隊(duì)列中的URL,形成網(wǎng)頁(yè)集合,計(jì)算每個(gè)頁(yè)面的PageRank值,計(jì)算完之后,將待抓取URL隊(duì)列中的URL按照PageRank值的大小排列,并按照該順序抓取頁(yè)面。
??? 如果每次抓取一個(gè)頁(yè)面,就重新計(jì)算PageRank值,一種折中方案是:每抓取K個(gè)頁(yè)面后,重新計(jì)算一次PageRank值。但是這種情況還會(huì)有一個(gè)問(wèn)題:對(duì)于已經(jīng)下載下來(lái)的頁(yè)面中分析出的鏈接,也就是我們之前提到的未知網(wǎng)頁(yè)那一部分,暫時(shí)是沒(méi)有PageRank值的。為了解決這個(gè)問(wèn)題,會(huì)給這些頁(yè)面一個(gè)臨時(shí)的PageRank值:將這個(gè)網(wǎng)頁(yè)所有入鏈傳遞進(jìn)來(lái)的PageRank值進(jìn)行匯總,這樣就形成了該未知頁(yè)面的PageRank值,從而參與排序。下面舉例說(shuō)明:
??? 5.OPIC策略策略
??? 該算法實(shí)際上也是對(duì)頁(yè)面進(jìn)行一個(gè)重要性打分。在算法開(kāi)始前,給所有頁(yè)面一個(gè)相同的初始現(xiàn)金(cash)。當(dāng)下載了某個(gè)頁(yè)面P之后,將P的現(xiàn)金分?jǐn)偨o所有從P中分析出的鏈接,并且將P的現(xiàn)金清空。對(duì)于待抓取URL隊(duì)列中的所有頁(yè)面按照現(xiàn)金數(shù)進(jìn)行排序。
??? 6.大站優(yōu)先策略
??? 對(duì)于待抓取URL隊(duì)列中的所有網(wǎng)頁(yè),根據(jù)所屬的網(wǎng)站進(jìn)行分類。對(duì)于待下載頁(yè)面數(shù)多的網(wǎng)站,優(yōu)先下載。這個(gè)策略也因此叫做大站優(yōu)先策略。?





