天天看點

網絡爬蟲了解 - 榮鋒亮

網絡爬蟲了解

網絡爬蟲(又被稱為網頁蜘蛛,網絡機器人,在FOAF社群中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動的抓取網際網路資訊的程式或者腳本。另外一些不常使用的名字還有螞蟻,自動索引,模拟程式或者蠕蟲。

1概述

随着網絡的迅速發展,網際網路成為大量資訊的載體,如何有效地提取并利用這些資訊成為一個巨大的挑戰。搜尋引擎(Search Engine),例如傳統的通用搜尋引擎AltaVista,Yahoo!和Google等,作為一個輔助人們檢索資訊的工具成為使用者通路網際網路的入口和指南。但是,這些通用性搜尋引擎也存在着一定的局限性,如:

(1) 不同領域、不同背景的使用者往往具有不同的檢索目的和需求,通用搜尋引擎所傳回的結果包含大量使用者不關心的網頁。

(2)通用搜尋引擎的目标是盡可能大的網絡覆寫率,有限的搜尋引擎伺服器資源與無限的網絡資料資源之間的沖突将進一步加深。

(3)網際網路資料形式的豐富和網絡技術的不斷發展,圖檔、資料庫、音頻、視訊多媒體等不同資料大量出現,通用搜尋引擎往往對這些資訊含量密集且具有一定結構的資料無能為力,不能很好地發現和擷取。

(4)通用搜尋引擎大多提供基于關鍵字的檢索,難以支援根據語義資訊提出的查詢。

網絡爬蟲

為了解決上述問題,定向抓取相關網頁資源的聚焦爬蟲應運而生。聚焦爬蟲是一個自動下載下傳網頁的程式,它根據既定的抓取目标,有選擇的通路網際網路上的網頁與相關的連結,擷取所需要的資訊。與通用爬蟲(general?purpose web crawler)不同,聚焦爬蟲并不追求大的覆寫,而将目标定為抓取與某一特定主題内容相關的網頁,為面向主題的使用者查詢準備資料資源。

1 聚焦爬蟲工作原理以及關鍵技術概述

網絡爬蟲是一個自動提取網頁的程式,它為搜尋引擎從網際網路上下載下傳網頁,是搜尋引擎的重要組成。傳統爬蟲從一個或若幹初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從目前頁面上抽取新的URL放入隊列,直到滿足系統的一定停止條件。聚焦爬蟲的工作流程較為複雜,需要根據一定的網頁分析算法過濾與主題無關的連結,保留有用的連結并将其放入等待抓取的URL隊列。然後,它将根據一定的搜尋政策從隊列中選擇下一步要抓取的網頁URL,并重複上述過程,直到達到系統的某一條件時停止。另外,所有被爬蟲抓取的網頁将會被系統存貯,進行一定的分析、過濾,并建立索引,以便之後的查詢和檢索;對于聚焦爬蟲來說,這一過程所得到的分析結果還可能對以後的抓取過程給出回報和指導。

相對于通用網絡爬蟲,聚焦爬蟲還需要解決三個主要問題:

(1) 對抓取目标的描述或定義;

(2) 對網頁或資料的分析與過濾;

(3) 對URL的搜尋政策。

抓取目标的描述和定義是決定網頁分析算法與URL搜尋政策如何制訂的基礎。而網頁分析算法和候選URL排序算法是決定搜尋引擎所提供的服務形式和爬蟲網頁抓取行為的關鍵所在。這兩個部分的算法又是緊密相關的。

2 抓取目标描述

現有聚焦爬蟲對抓取目标的描述可分為基于目标網頁特征、基于目标資料模式和基于領域概念3種。

基于目标網頁特征的爬蟲所抓取、存儲并索引的對象一般為網站或網頁。根據種子樣本擷取方式可分為:

(1) 預先給定的初始抓取種子樣本;

(2) 預先給定的網頁分類目錄和與分類目錄對應的種子樣本,如Yahoo!分類結構等;

(3) 通過使用者行為确定的抓取目标樣例,分為:

(a) 使用者浏覽過程中顯示标注的抓取樣本;

(b) 通過使用者日志挖掘得到通路模式及相關樣本。

其中,網頁特征可以是網頁的内容特征,也可以是網頁的連結結構特征,等等。

2爬蟲技術研究綜述編輯

基于目标資料模式的爬蟲針對的是網頁上的資料,所抓取的資料一般要符合一定的模式,或者可以轉化或映射為目标資料模式。

另一種描述方式是建立目标領域的本體或詞典,用于從語義角度分析不同特征在某一主題中的重要程度。

3網頁搜尋政策編輯

網頁的抓取政策可以分為深度優先、廣度優先和最佳優先三種。深度優先在很多情況下會導緻爬蟲的陷入(trapped)問題,目前常見的是廣度優先和最佳優先方法。

廣度優先搜尋政策

廣度優先搜尋政策是指在抓取過程中,在完成目前層次的搜尋後,才進行下一層次的搜尋。該算法的設計和實作相對簡單。在目前為覆寫盡可能多的網頁,一般使用廣度優先搜尋方法。也有很多研究将廣度優先搜尋政策應用于聚焦爬蟲中。其基本思想是認為與初始URL在一定連結距離内的網頁具有主題相關性的機率很大。另外一種方法是将廣度優先搜尋與網頁過濾技術結合使用,先用廣度優先政策抓取網頁,再将其中無關的網頁過濾掉。這些方法的缺點在于,随着抓取網頁的增多,大量的無關網頁将被下載下傳并過濾,算法的效率将變低。

最佳優先搜尋政策

最佳優先搜尋政策按照一定的網頁分析算法,預測候選URL與目标網頁的相似度,或與主題的相關性,并選取評價最好的一個或幾個URL進行抓取。它隻通路經過網頁分析算法預測為“有用”的網頁。存在的一個問題是,在爬蟲抓取路徑上的很多相關網頁可能被忽略,因為最佳優先政策是一種局部最優搜尋算法。是以需要将最佳優先結合具體的應用進行改進,以跳出局部最優點。将在第4節中結合網頁分析算法作具體的讨論。研究表明,這樣的閉環調整可以将無關網頁數量降低30%~90%。

深度優先搜尋政策

深度優先搜尋政策從起始網頁開始,選擇一個URL進入,分析這個網頁中的URL,選擇一個再進入。如此一個連結一個連結地抓取下去,直到處理完一條路線之後再處理下一條路線。深度優先政策設計較為簡單。然而門戶網站提供的連結往往最具價值,PageRank也很高,但每深入一層,網頁價值和PageRank都會相應地有所下降。這暗示了重要網頁通常距離種子較近,而過度深入抓取到的網頁卻價值很低。同時,這種政策抓取深度直接影響着抓取命中率以及抓取效率,對抓取深度是該種政策的關鍵。相對于其他兩種政策而言。此種政策很少被使用。

4網頁分析算法

網頁分析算法可以歸納為基于網絡拓撲、基于網頁内容和基于使用者通路行為三種類型。

網絡拓撲的分析算法

基于網頁之間的連結,通過已知的網頁或資料,來對與其有直接或間接連結關系的對象(可以是網頁或網站等)作出評價的算法。又分為網頁粒度、網站粒度和網頁塊粒度這三種。

1 網頁(Webpage)粒度的分析算法

PageRank和HITS算法是最常見的連結分析算法,兩者都是通過對網頁間連結度的遞歸和規範化計算,得到每個網頁的重要度評價。PageRank算法雖然考慮了使用者通路行為的随機性和Sink網頁的存在,但忽略了絕大多數使用者通路時帶有目的性,即網頁和連結與查詢主題的相關性。針對這個問題,HITS算法提出了兩個關鍵的概念:權威型網頁(authority)和中心型網頁(hub)。

基于連結的抓取的問題是相關頁面主題團之間的隧道現象,即很多在抓取路徑上偏離主題的網頁也指向目标網頁,局部評價政策中斷了在目前路徑上的抓取行為。文獻[21]提出了一種基于反向連結(BackLink)的分層式上下文模型(Context Model),用于描述指向目标網頁一定實體跳數半徑内的網頁拓撲圖的中心Layer0為目标網頁,将網頁依據指向目标網頁的實體跳數進行層次劃分,從外層網頁指向内層網頁的連結稱為反向連結。

2 網站粒度的分析算法

網站粒度的資源發現和管理政策也比網頁粒度的更簡單有效。網站粒度的爬蟲抓取的關鍵之處在于站點的劃分和站點等級(SiteRank)的計算。SiteRank的計算方法與PageRank類似,但是需要對網站之間的連結作一定程度抽象,并在一定的模型下計算連結的權重。

網站劃分情況分為按域名劃分和按IP位址劃分兩種。文獻[18]讨論了在分布式情況下,通過對同一個域名下不同主機、伺服器的IP位址進行站點劃分,構造站點圖,利用類似PageRank的方法評價SiteRank。同時,根據不同檔案在各個站點上的分布情況,構造文檔圖,結合SiteRank分布式計算得到DocRank。文獻[18]證明,利用分布式的SiteRank計算,不僅大大降低了單機站點的算法代價,而且克服了單獨站點對整個網絡覆寫率有限的缺點。附帶的一個優點是,常見PageRank 造假難以對SiteRank進行欺騙。

3 網頁塊粒度的分析算法

在一個頁面中,往往含有多個指向其他頁面的連結,這些連結中隻有一部分是指向主題相關網頁的,或根據網頁的連結錨文本表明其具有較高重要性。但是,在PageRank和HITS算法中,沒有對這些連結作區分,是以常常給網頁分析帶來廣告等噪聲連結的幹擾。在網頁塊級别(Block?level)進行連結分析的算法的基本思想是通過VIPS網頁分割算法将網頁分為不同的網頁塊(page block),然後對這些網頁塊建立page?to?block和block?to?page的連結矩陣,?分别記為Z和X。于是,在page?to?page圖上的網頁塊級别的PageRank為?W?p=X×Z;?在block?to?block圖上的BlockRank為?W?b=Z×X。已經有人實作了塊級别的PageRank和HITS算法,并通過實驗證明,效率和準确率都比傳統的對應算法要好。

網頁分析算法

基于網頁内容的分析算法指的是利用網頁内容(文本、資料等資源)特征進行的網頁評價。網頁的内容從原來的以超文本為主,發展到後來動态頁面(或稱為Hidden Web)資料為主,後者的資料量約為直接可見頁面資料(PIW,Publicly Indexable Web)的400~500倍。另一方面,多媒體資料、Web Service等各種網絡資源形式也日益豐富。是以,基于網頁内容的分析算法也從原來的較為單純的文字檢索方法,發展為涵蓋網頁資料抽取、機器學習、資料挖掘、語義了解等多種方法的綜合應用。本節根據網頁資料形式的不同,将基于網頁内容的分析算法,歸納以下三類:第一種針對以文本和超連結為主的無結構或結構很簡單的網頁;第二種針對從結構化的資料源(如RDBMS)動态生成的頁面,其資料不能直接批量通路;第三種針對的資料界于第一和第二類資料之間,具有較好的結構,顯示遵循一定模式或風格,且可以直接通路。

基于文本的網頁分析算法

1) 純文字分類與聚類算法

很大程度上借用了文字檢索的技術。文本分析算法可以快速有效的對網頁進行分類和聚類,但是由于忽略了網頁間和網頁内部的結構資訊,很少單獨使用。

2) 超文本分類和聚類算法

根據網頁連結網頁的相關類型對網頁進行分類,依靠相關聯的網頁推測該網頁的類型。

這些處理被稱為網絡抓取或者蜘蛛爬行。很多站點,尤其是搜尋引擎,都使用爬蟲提供最新的資料,它主要用于提供它通路過頁面的一個副本,然後,搜尋引擎就可以對得到的頁面進行索引,以提供快速的通路。蜘蛛也可以在web上用來自動執行一些任務,例如檢查連結,确認html代碼;也可以用來抓取網頁上某種特定類型資訊,例如抓取電子郵件位址(通常用于垃圾郵件)。

一個網絡蜘蛛就是一種機器人,或者軟體代理。大體上,它從一組要通路的URL連結開始,可以稱這些URL為種子。爬蟲通路這些連結,它辨認出這些頁面的所有超連結,然後添加到這個URL清單,可以稱作檢索前沿。這些URL按照一定的政策反複通路。

主要内容

· 1 爬行政策

o 1.1 選擇政策

§ 1.1.1 限定通路連結

§ 1.1.2 路徑檢索

§ 1.1.3 聚焦檢索

§ 1.1.4 抓取深層的網頁

§ 1.1.5 Web 3.0檢索

o 1.2 重新通路政策

o 1.3 平衡禮貌政策

o 1.4 并行化政策

· 2 網絡爬蟲體系結構

o 2.1 URL規範化

· 3 爬蟲身份識别

· 4 網絡爬蟲的例子

o 4.1 開源的網絡爬蟲

1. 爬行政策

下述的三種網絡特征,造成了設計網頁爬蟲抓取政策變得很難:

 它巨大的資料量;

 它快速的更新頻率;

 動态頁面的産生

它們三個特征一起産生了很多種類的爬蟲抓取連結。

巨大的資料量暗示了爬蟲,在給定的時間内,隻可以抓取所下載下傳網絡的一部分,是以,它需要對它的抓取頁面設定優先級;快速的更新頻率說明在爬蟲抓取下載下傳某網站一個網頁的時候,很有可能在這個站點又有很的網頁被添加進來,或者這個頁面被更新或者删除了。

最近新增的很多頁面都是通過伺服器端腳本語言産生的,無窮的參數組合也增加了爬蟲抓取的難度,隻有一小部分這種組合會傳回一些獨特的内容。例如,一個很小照片存儲庫僅僅通過get方式可能提供就給使用者三種操作方式。如果這裡存着四種分類方式,三種縮略圖方式,兩種檔案格式,和一個禁止使用者提供内容的選項,那麼,同樣的内容就可以通過48種方式通路。這種數學組合給網絡爬蟲創造的難處就是,為了擷取不同的内容,他們必須篩選無窮僅有微小變化的組合。

正如愛德華等人所說的:“用于檢索的帶寬不是無限的,也不是免費的;是以,如果引入衡量爬蟲抓取品質或者新鮮度的有效名額的話,不但伸縮性,連有效性都将變得十分必要”(愛德華等人,2001年)。一個爬蟲就必須小心的選擇下一步要通路什麼頁面。網頁爬蟲的行為通常是四種政策組合的結果。

♦ 選擇政策,決定所要下載下傳的頁面;

♦ 重新通路政策,決定什麼時候檢查頁面的更新變化;

♦ 平衡禮貌政策,指出怎樣避免站點超載;

♦ 并行政策,指出怎麼協同達到分布式抓取的效果;

1.1 選擇政策:

就現在網絡資源的大小而言,即使很大的搜尋引擎也隻能擷取網絡上可得到資源的一小部分。由勞倫斯河蓋爾斯共同做的一項研究指出,沒有一個搜尋引擎抓取的内容達到網絡的16%(勞倫斯河蓋爾斯,2001)。網絡爬蟲通常僅僅下載下傳網頁内容的一部分,但是大家都還是強烈要求下載下傳的部分包括最多的相關頁面,而不僅僅是一個随機的簡單的站點。

這就要求一個公共标準來區分網頁的重要程度,一個頁面的重要程度與他自身的品質有關,與按照連結數、通路數得出的受歡迎程度有關,甚至與他本身的網址(後來出現的把搜尋放在一個頂級域名或者一個固定頁面上的垂直搜尋)有關。設計一個好的搜尋政策還有額外的困難,它必須在不完全資訊下工作,因為整個頁面的集合在抓取時是未知的。

Cho等人(Cho et al,1998)做了第一份抓取政策的研究。他們的資料是斯坦福大學網站中的18萬個頁面,使用不同的政策分别模仿抓取。排序的方法使用了廣度優先,後鍊計數,和部分pagerank算法。計算顯示,如果你想要優先下載下傳pagerank高的頁面,那麼,部分PageRank政策是比較好的,其次是廣度優先和後鍊計數。并且,這樣的結果僅僅是針對一個站點的。

Najork和Wiener (Najork and Wiener, 2001)采用實際的爬蟲,對3.28億個網頁,采用廣度優先研究。他們發現廣度優先會較早的抓到PageRank高的頁面(但是他們沒有采用其他政策進行研究)。作者給出的解釋是:“最重要的頁面會有很多的主機連接配接到他們,并且那些連結會較早的發現,而不用考慮從哪一個主機開始。”

Abiteboul (Abiteboul 等人, 2003),設計了一種基于OPIC(線上頁面重要指數)的抓取戰略。在OPIC中,每一個頁面都有一個相等的初始權值,并把這些權值平均分給它所指向的頁面。這種算法與Pagerank相似,但是他的速度很快,并且可以一次完成。OPIC的程式首先抓取擷取權值最大的頁面,實驗在10萬個幂指分布的模拟頁面中進行。并且,實驗沒有和其它政策進行比較,也沒有在真正的WEB頁面測試。

Boldi等人(Boldi et al., 2004)的模拟檢索實驗進行在 從.it網絡上取下的4000萬個頁面和從webbase得到的1億個頁面上,測試廣度優先和深度優先,随機序列和有序序列。比較的基礎是真實頁面pageRank值和計算出來的pageRank值的接近程度。令人驚奇的是,一些計算pageRank很快的頁面(特别明顯的是廣度優先政策和有序序列)僅僅可以達到很小的接近程度。

Baeza-Yates等人(Baeza-Yates et al., 2005) 在從.gr域名和.cl域名子網站上擷取的300萬個頁面上模拟實驗,比較若幹個抓取政策。結果顯示OPIC政策和站點隊列長度,都比廣度優先要好;并且如果可行的話,使用之前的爬行抓取結果來指導這次抓取,總是十分有效的。

Daneshpajouh等人(Daneshpajouh et al., 2008)設計了一個用于尋找好種子的社群。它們從來自不同社群的高PageRank頁面開始檢索的方法,疊代次數明顯小于使用随機種子的檢索。使用這種方式,可以從以前抓取頁面之中找到好的種子,使用這些種子是十分有效的。

1.1.1 限定通路連結

一個爬蟲可能僅僅想找到html頁面的種子而避免其他的檔案類型。為了僅僅得到html的資源,一個爬蟲可以首先做一個http head的請求,以在使用request方法擷取所有的資源之前,決定這個網絡檔案的類型。為了避免要發送過多的head請求,爬蟲可以交替的檢查url并且僅僅對以html,htm和反斜杠結尾的檔案發送資源請求。這種政策會導緻很多的html資源在無意中錯過,一種相似的政策是将網絡資源的擴充名同已知是html檔案類型的一組擴充名(如.html,.htm,.asp,.php,.aspx,反斜杠)進行比較。

一些爬蟲也會限制對任何含有“?”的資源(這些是動态生成的)進行擷取請求,以避免蜘蛛爬行在某一個站點中陷入下載下傳無窮無盡的URL的困境。

1.1.2 路徑檢索

一些爬蟲會盡可能多的嘗試下載下傳一個特定站點的資源。Cothey(Cothey,2004)引入了一種路徑檢索的爬蟲,它會嘗試抓取需要檢索資源的所有URL。例如,給定一個種子位址:它将會嘗試檢索/hamster/menkey/,/hamster/和/ 。Cothey發現路徑檢索對發現獨立資源,或者一些通常爬蟲檢索不到的的連接配接是非常有效的。

一些路徑檢索的爬蟲也被稱為收割機軟體,因為他們通常用于收割或者收集所有的内容,可能是從特定的頁面或者主機收集相冊的照片。

1.1.3 聚焦抓取

爬蟲所抓取頁面的重要程度也可以表述成它與給定查詢之間相似程度的函數。網絡爬蟲嘗試下載下傳相似頁面,可以稱為聚焦檢索或者主題檢索。關于主題檢索和聚焦檢索的概念,最早是由Menczer(Menczer 1997; Menczer and Belew, 1998)和Chakrabarti等人首先提出來的(Chakrabarti et al., 1999)。

聚焦檢索的主要問題是網頁爬蟲的使用環境,我們希望在實際下載下傳頁面之前,就可以知道給定頁面和查詢之間的相似度。一個可能的方法就是在連結之中設定錨點,這就是在早期時候,Pinkerton(Pinkerton,1994)曾經在一個爬蟲中采用的政策。Diligenti等人(Diligenti等人,2000)建議使用已經抓取頁面的内容去推測查詢和未通路頁的相似度。一個聚焦查詢的表現的好壞主要依賴于查詢主題内容的豐富程度,通常還會依賴頁面查詢引擎提供的查詢起點。

1.1.4 抓取深層的網頁

很多的頁面隐藏的很深或隐藏在在看不到的網絡之中。這些頁面通常隻有在向資料庫送出查詢的時候才可以通路到,如果沒有連結指向他們的話,一般的爬蟲是不能通路到這些頁面的。谷歌站點地圖協定和mod oai(Nelson等人,2005)嘗試允許發現這些深層次的資源。

深層頁面抓取器增加了抓取網頁的連結數。一些爬蟲僅僅抓取形如<a href=”url”連結。某些情況下,例如Googlebot,WEB抓取的是所有超文本所包含的内容,标簽和文本。

1.1.5 WEB3.0檢索

Web3.0為下一代搜尋技術定義了更先進的技術和新的準則,可以概括為語義網絡和網站模闆解析的概念。第三代檢索技術将建立在人機巧妙的聯系的基礎上。

1.2重新通路政策

網絡具有動态性很強的特性。抓取網絡上的一小部分内容可能會花費真的很長的時間,通常用周或者月來衡量。當爬蟲完成它的抓取的任務以後,很多操作是可能會發生的,這些操作包括建立,更新和删除。

從搜尋引擎的角度來看,不檢測這些事件是有成本的,成本就是我們僅僅擁有一份過時的資源。最常使用的成本函數,是新鮮度和過時性(2000年,Cho 和Garcia-Molina)

新鮮度:這是一個衡量抓取内容是不是準确的二進制值。在時間t内,倉庫中頁面p的新鮮度是這樣定義的:

網絡爬蟲了解 - 榮鋒亮

新鮮度

過時性:這是一個衡量本地已抓取的内容過時程度的名額。在時間t時,倉庫中頁面p的時效性的定義如下:

網絡爬蟲了解 - 榮鋒亮

過時性

在頁面抓取中,新鮮度和過時性的發展

Coffman等人(Edward G. Coffman,1998)是從事爬蟲對象定義的,他們提出了一個相當于新鮮度的概念,但是使用了不同的措詞:他們建議爬蟲必須最小化過時頁面部分。他們指出網絡爬行的問題就相當于多個隊列,一個投票系統;這裡,爬蟲是伺服器,不同的站點是隊列。頁面修改是到達的顧客,頁面切換的時間是頁面進入一個單一站點的間隔。在這個模型下,每一個顧客在投票系統的平均時間,相當于爬蟲的平均過時性。

爬蟲的目标是盡可能高的提高頁面的新鮮度,同時降低頁面的過時性。這一目标并不是完全一樣的,第一種情況,爬蟲關心的是有多少頁面時過時的;在第二種情況,爬蟲關心的頁面過時了多少。

兩種最簡單的重新通路政策是由Cho和Garcia-Molina研究的(Cho 和Garcia-Molina,2003):

統一政策:使用相同的頻率,重新通路收藏中的所有的連結,而不考慮他們更新頻率。

正比政策:對變化越多的網頁,重新通路的頻率也越高。網頁通路的頻率和網頁變化的頻率直接相關。

(兩種情況下,爬蟲的重新抓取都可以采用随機方式,或者固定的順序)

Cho和Garcia-Molina證明了一個出人意料的結果。以平均新鮮度方式衡量,統一政策在模拟頁面和真實的網絡抓取中都比正比政策出色。對于這種結果的解釋是:當一個頁面變化太快的時候,爬蟲将會将會在不斷的嘗試重新抓取而浪費很多時間,但是卻還是不能保證頁面的新鮮度。

為了提高頁面的新鮮度,我們應該宣判變化太快的頁面死罪(Cho和Garcia-Molina, 2003a)。最佳的重新通路政策既不是統一政策,也不是正比政策;保持平均頁面新鮮度高的最佳方法政策包括忽略那些變化太快的頁面,而保持頁面平均過時性低的方法則是對每一頁按照頁面變化率單調變化的政策通路。兩種情況下,最佳的政策較正比政策,都更接近統一政策。正如Coffman等人(Edward G.Coffman,1998)所注意到的:“為了最小化頁面過時的時間,對任一個頁面的通路都應該盡可能的均勻間隔地通路。”對于重新通路的詳盡的政策在大體上是不可以達到的,但是他們可以從數學上得到,因為他們依賴于頁面的變化。(Cho和Garcia-Molina,2003a)指出指數變化是描述頁面變化的好方法,同時(Ipeirotis等人,2005)指出了怎麼使用統計工具去發現适合這些變化的參數。注意在這裡的重新通路政策認為每一個頁面都是相同的(網絡上所有的頁面價值都是一樣的)這不是現實的情況,是以,為了擷取更好的抓取政策,更多有關網頁品質的資訊應該考慮進去。

1.3 平衡禮貌政策

爬蟲相比于人,可以有更快的檢索速度和更深的層次,是以,他們可能使一個站點癱瘓。不需要說一個單獨的爬蟲一秒鐘要執行多條請求,下載下傳大的檔案。一個伺服器也會很難響應多線程爬蟲的請求。

就像Koster(Koster,1995)所注意的那樣,爬蟲的使用對很多工作都是很有用的,但是對一般的社群,也需要付出代價。使用爬蟲的代價包括:

 網絡資源:在很長一段時間,爬蟲使用相當的帶寬高度并行地工作。

 伺服器超載:尤其是對給定伺服器的通路過高時。

 品質糟糕的爬蟲,可能是伺服器或者路由器癱瘓,或者會嘗試下載下傳自己無法處理的頁面。

 個人爬蟲,如果過多的人使用,可能是網絡或者伺服器阻塞。

對這些問題的一個部分解決方法是漫遊器排除協定(Robots exclusion protocol),也被稱為robots.txt議定書(Koster,1996),這份協定對于管理者指明網絡伺服器的那一部分不能到達是一個标準。這個标準沒有包括重新通路一台伺服器的間隔的建議,雖然通路間隔是避免伺服器超載的最有效的辦法。最近的商業搜尋軟體,如Ask Jeeves,MSN和Yahoo可以在robots.txt中使用一個額外的 “Crawl-delay”參數來指明請求之間的延遲。

對連接配接間隔時間的第一個建議由Koster 1993年給出,時間是60秒。按照這個速度,如果一個站點有超過10萬的頁面,即使我們擁有零延遲和無窮帶寬的完美連接配接,它也會需要兩個月的時間來下載下傳整個站點,并且,這個伺服器中的資源,隻有一小部分可以使用。這似乎是不可以接受的。

Cho(Cho和Garcia-Molina, 2003)使用10秒作為通路的間隔時間,WIRE爬蟲(Baeza-Yates and Castillo, 2002)使用15秒作為預設間隔。MercatorWeb(Heydon 和Najork, 1999)爬蟲使用了一種自适應的平衡政策:如果從某一伺服器下載下傳一個文檔需要t秒鐘,爬蟲就等待10t秒的時間,然後開始下一個頁面。Dill等人 (Dill et al., 2002) 使用1秒。

對于那些使用爬蟲用于研究目的的,一個更詳細的成本-效益分析是必要的,當決定去哪一個站點抓取,使用多快的速度抓取的時候,倫理的因素也需要考慮進來。

通路記錄顯示已知爬蟲的通路間隔從20秒鐘到3-4分鐘不等。需要注意的是即使很禮貌,采取了所有的安全措施來避免伺服器超載,還是會引來一些網絡伺服器管理者的抱怨的。Brin和Page注意到:運作一個針對超過50萬伺服器的爬蟲,會産生很多的郵件和電話。這是因為有無數的人在上網,而這些人不知道爬蟲是什麼,因為這是他們第一次見到。(Brin和Page,1998)

1.4 并行政策

一個并行爬蟲是并行運作多個程序的爬蟲。它的目标是最大化下載下傳的速度,同時盡量減少并行的開銷和下載下傳重複的頁面。為了避免下載下傳一個頁面兩次,爬蟲系統需要政策來處理爬蟲運作時新發現的URL,因為同一個URL位址,可能被不同的爬蟲程序抓到。

2. 網絡爬蟲體系結構

網頁爬蟲的高層體系結構

一個爬蟲不能像上面所說的,僅僅隻有一個好的抓取政策,還需要有一個高度優化的結構。

Shkapenyuk和Suel(Shkapenyuk和Suel,2002)指出:設計一個短時間内,一秒下載下傳幾個頁面的頗慢的爬蟲是一件很容易的事情,而要設計一個使用幾周可以下載下傳百萬級頁面的高性能的爬蟲,将會在系統設計,I/O和網絡效率,健壯性和易用性方面遇到衆多挑戰。

網路爬蟲是搜尋引擎的核心,他們算法和結構上的細節被當作商業機密。當爬蟲的設計釋出時,總會有一些為了阻止别人複制工作而缺失的細節。人們也開始關注主要用于阻止主要搜尋引擎釋出他們的排序算法的“搜尋引擎垃圾郵件”。

2.1 URL一般化

爬蟲通常會執行幾種類型的URL規範化來避免重複抓取某些資源。URL一般化也被稱為URL标準化,指的是修正URL并且使其前後一緻的過程。這裡有幾種一般化方法,包括轉化URL為小寫的,去除逗号(如‘.’ ‘..’等),對非空的路徑,在末尾加反斜杠。

3. 爬蟲身份識别

網絡爬蟲通過使用http請求的使用者代理(User Agent)字段來向網絡伺服器表明他們的身份。網絡管理者則通過檢查網絡伺服器的日志,使用使用者代理字段來辨認哪一個爬蟲曾經通路過以及它通路的頻率。使用者代理字段可能會包含一個可以讓管理者擷取爬蟲更多資訊的URL。郵件抓取器和其他懷有惡意的網絡爬蟲通常不會留任何的使用者代理字段内容,或者他們也會将他們的身份僞裝成浏覽器或者其他的知名爬蟲。

對于網路爬蟲,留下使用者标志資訊是十分重要的;這樣,網絡管理者在需要的時候就可以聯系爬蟲的主人。有時,爬蟲可能會陷入爬蟲陷阱或者是一個伺服器超負荷,這時,爬蟲主人需要使爬蟲停止。對那些有興趣了解特定爬蟲通路時間網絡管理者來講,使用者辨別資訊是十分重要的。

4.使用者爬蟲的例子

以下是一系列已經釋出的一般用途的網絡爬蟲(除了主題檢索的爬蟲)的體系結構,包括了對不同元件命名和突出特點的簡短的描述。

 RBSE (Eichmann,1994)是第一個釋出的爬蟲。它有兩個基礎程式。第一個是“spider”,抓取隊列中的内容到一個關系資料庫中,第二個程式是“mite”,是一個修改後的www的ASCII浏覽器,負責從網絡上下載下傳頁面。

 WebCrawler(Pinkerton,1994)是第一個公開可用的 用來建立全文索引的一個子程式,他使用庫www來下載下傳頁面;另外一個程式使用廣度優先來解析擷取URL并對其排序;它還包括一個根據標明文本和查詢相似程度爬行的實時爬蟲。

 World Wide Web Worm (McBryan, 1994)是一個用來為檔案建立包括标題和URL簡單索引的爬蟲。索引可以通過grep式的Unix指令來搜尋。

 Google Crawler (Brin and Page, 1998)用了一些細節來描述,但是這些細節僅僅是關于使用C++和Python編寫的、一個早期版本的體系結構。因為文本解析就是全文檢索和URL抽取的過程,是以爬蟲內建了索引處理。這裡擁有一個URL伺服器,用來給幾個爬蟲程式發送要抓取的URL清單。在文本解析的時候,新發現的URL傳送給URL伺服器并檢測這個URL是不是已經存在,如果不存在的話,該URL就加入到URL伺服器中。

 CobWeb (da Silva et al., 1999)使用了一個中央“排程者”和一系列的“分布式的搜集者”。搜集者解析下載下傳的頁面并把找到的URL發送給排程者,然後排程者反過來配置設定給搜集者。排程者使用深度優先政策,并且使用平衡禮貌政策來避免伺服器超載。爬蟲是使用Perl語言編寫的。

 Mercator (Heydon and Najork, 1999; Najork and Heydon, 2001)是一個分布式的,子產品化的使用java編寫的網絡爬蟲。它的子產品化源自于使用可互換的的“協定子產品”和“處理子產品”。協定子產品負責怎樣擷取網頁(例如使用HTTP),處理子產品負責怎樣處理頁面。标準處理子產品僅僅包括了解析頁面和抽取URL,其他處理子產品可以用來檢索文本頁面,或者搜集網絡資料。

 WebFountain (Edwards et al., 2001)是一個與Mercator類似的分布式的子產品化的爬蟲,但是使用C++編寫的。它的特點是一個管理者機器控制一系列的螞蟻機器。經過多次下載下傳頁面後,頁面的變化率可以推測出來,這時,一個非線性的方法必須用于求解方程以獲得一個最大的新鮮度的通路政策。作者推薦在早期檢索階段使用這個爬蟲,然後用統一政策檢索,就是所有的頁面都使用相同的頻率通路。

 PolyBot [Shkapenyuk and Suel, 2002]是一個使用C++和Python編寫的分布式網絡爬蟲。它由一個爬蟲管理者,一個或多個下載下傳者,一個或多個DNS解析者組成。抽取到的URL被添加到硬碟的一個隊列裡面,然後使用批處理的模式處理這些URL。平衡禮貌方面考慮到了第二、三級網域,因為第三級網域通常也會儲存在同一個網絡伺服器上。

 WebRACE (Zeinalipour-Yazti and Dikaiakos, 2002)是一個使用java實作的,擁有檢索子產品和緩存子產品的爬蟲,它是一個很通用的稱作eRACE的系統的一部分。系統從使用者得到下載下傳頁面的請求,爬蟲的行為有點像一個聰明的代理伺服器。系統還監視訂閱網頁的請求,當網頁發生改變的時候,它必須使爬蟲下載下傳更新這個頁面并且通知訂閱者。WebRACE最大的特色是,當大多數的爬蟲都從一組URL開始的時候,WebRACE可以連續地的接收抓取開始的URL位址。

 Ubicrawer (Boldi et al., 2004)是一個使用java編寫的分布式爬蟲。它沒有中央程式。它有一組完全相同的代理組成,配置設定功能通過主機前後一緻的散列計算進行。這裡沒有重複的頁面,除非爬蟲崩潰了(然後,另外一個代理就會接替崩潰的代理重新開始抓取)。爬蟲設計為高伸縮性和允許失敗的。

 FAST Crawler (Risvik and Michelsen, 2002) 是一個分布式的爬蟲,在Fast Search&Transfer中使用,關于其體系結構的一個大緻的描述可以在[citation needed]找到。

 Labrador,一個工作在開源項目Terrier Search Engine上的非開源的爬蟲。

 TeezirCrawler是一個非開源的可伸縮的網頁抓取器,在Teezir上使用。該程式被設計為一個完整的可以處理各種類型網頁的爬蟲,包括各種JavaScript和HTML文檔。爬蟲既支援主題檢索也支援非主題檢索。

 Spinn3r, 一個通過部落格建構回報資訊的爬蟲。 Spinn3r是基于java的,它的大部分的體系結構都是開源的。

 HotCrawler,一個使用c語言和php編寫的爬蟲。

 ViREL Microformats Crawler,搜尋公衆資訊作為嵌入到網頁的一小部分。

除了上面列出的幾個特定的爬蟲結構以外,還有Cho (Cho and Garcia-Molina, 2002)和Chakrabarti (Chakrabarti, 2003)釋出的一般的爬蟲體系結構。

4.1 開源爬蟲

 DataparkSearch是一個在GNU GPL許可下釋出的爬蟲搜尋引擎。

 GNU Wget是一個在GPL許可下,使用C語言編寫的指令行式的爬蟲。它主要用于網絡伺服器和FTP伺服器的鏡像。

 Heritrix是一個網際網路檔案館級的爬蟲,設計的目标為對大型網絡的大部分内容的定期存檔快照,是使用java編寫的。

 Ht://Dig在它和索引引擎中包括了一個網頁爬蟲。

 HTTrack用網絡爬蟲建立網絡站點鏡像,以便離線觀看。它使用C語言編寫,在GPL許可下發行。

 ICDL Crawler是一個用C++編寫,跨平台的網絡爬蟲。它僅僅使用空閑的CPU資源,在ICDL标準上抓取整個站點。

 JSpider是一個在GPL許可下發行的,高度可配置的,可定制的網絡爬蟲引擎。

 LLarbin由Sebastien Ailleret開發;

 Webtools4larbin由Andreas Beder開發;

 Methabot是一個使用C語言編寫的高速優化的,使用指令行方式運作的,在2-clause BSD許可下釋出的網頁檢索器。它的主要的特性是高可配置性,子產品化;它檢索的目标可以是本地檔案系統,HTTP或者FTP。

 Nutch是一個使用java編寫,在Apache許可下發行的爬蟲。它可以用來連接配接Lucene的全文檢索套件;

 Pavuk是一個在GPL許可下發行的,使用指令行的WEB站點鏡像工具,可以選擇使用X11的圖形界面。與wget和httprack相比,他有一系列先進的特性,如以正規表達式為基礎的檔案過濾規則和檔案建立規則。

 WebVac是斯坦福WebBase項目使用的一個爬蟲。

 WebSPHINX(Miller and Bharat, 1998)是一個由java類庫構成的,基于文本的搜尋引擎。它使用多線程進行網頁檢索,html解析,擁有一個圖形使用者界面用來設定開始的種子URL和抽取下載下傳的資料;

 WIRE-網絡資訊檢索環境(Baeza-Yates 和 Castillo, 2002)是一個使用C++編寫,在GPL許可下發行的爬蟲,内置了幾種頁面下載下傳安排的政策,還有一個生成報告和統計資料的子產品,是以,它主要用于網絡特征的描述;

 LWP:RobotUA(Langheinrich,2004)是一個在Perl5許可下發行的,可以優異的完成并行任務的 Perl類庫構成的機器人。

 Web Crawler是一個為.net準備的開放源代碼的網絡檢索器(C#編寫)。

 Sherlock Holmes收集和檢索本地和網絡上的文本類資料(文本檔案,網頁),該項目由捷克門戶網站中樞(Czech web portal Centrum)贊助并且主用商用于這裡;它同時也使用在。

 YaCy是一個基于P2P網絡的免費的分布式搜尋引擎(在GPL許可下發行);

 Ruya是一個在廣度優先方面表現優秀,基于等級抓取的開放源代碼的網絡爬蟲。在英語和日語頁面的抓取表現良好,它在GPL許可下發行,并且完全使用Python編寫。按照robots.txt有一個延時的單網域延時爬蟲。

 Universal Information Crawler快速發展的網絡爬蟲,用于檢索存儲和分析資料;

 Agent Kernel,當一個爬蟲抓取時,用來進行安排,并發和存儲的java架構。

 是一個使用C#編寫,需要SQL Server 2005支援的,在GPL許可下發行的多功能的開源的機器人。它可以用來下載下傳,檢索,存儲包括電子郵件位址,檔案,超連結,圖檔和網頁在内的各種資料。

 Dine是一個多線程的java的http用戶端。它可以在LGPL許可下進行二次開發。

網絡爬蟲的組成

在網絡爬蟲的系統架構中,主過程由控制器,解析器,資源庫三部分組成。控制器的主要工作是負責給多線程中的各個爬蟲線程配置設定工作任務。解析器的主要工作是下載下傳網頁,進行頁面的處理,主要是将一些JS腳本标簽、CSS代碼内容、空格字元、HTML标簽等内容處理掉,爬蟲的基本工作是由解析器完成。資源庫是用來存放下載下傳到的網頁資源,一般都采用大型的資料庫存儲,如Oracle資料庫,并對其建立索引。

控制器

控制器是網絡爬蟲的中央控制器,它主要是負責根據系統傳過來的URL連結,配置設定一線程,然後啟動線程調用爬蟲爬取網頁的過程。

解析器

解析器是負責網絡爬蟲的主要部分,其負責的工作主要有:下載下傳網頁的功能,對網頁的文本進行處理,如過濾功能,抽取特殊HTML标簽的功能,分析資料功能。

資源庫

主要是用來存儲網頁中下載下傳下來的資料記錄的容器,并提供生成索引的目标源。中大型的資料庫産品有:Oracle、Sql Server等。