網絡爬蟲

網絡爬蟲(又被稱爲網頁蜘蛛,網絡機器人,在FOAF社區中間,更常常的稱爲網頁追逐者),是一種按照必定的規則,自動地抓取萬維網信息的程序或者腳本。另一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。php

 

產生背景

隨着網絡的迅速發展,萬維網成爲大量信息的載體,如何有效地提取並利用這些信息成爲一個巨大的挑戰。搜索引擎(Search Engine),例如傳統的通用搜索引擎AltaVista,Yahoo!和Google等,做爲一個輔助人們檢索信息的工具成爲用戶訪問萬維網的入口和指南。可是,這些通用性搜索引擎也存在着必定的侷限性,如:
(1)不一樣領域、不一樣背景的用戶每每具備不一樣的檢索目的和需求,通用搜索引擎所返回的結果包含大量用戶不關心的網頁。
(2)通用搜索引擎的目標是儘量大的網絡覆蓋率,有限的搜索引擎服務器資源與無限的網絡數據資源之間的矛盾將進一步加深。
(3)萬維網數據形式的豐富和網絡技術的不斷髮展,圖片、數據庫、音頻、視頻多媒體等不一樣數據大量出現,通用搜索引擎每每對這些信息含量密集且具備必定結構的數據無能爲力,不能很好地發現和獲取。
(4)通用搜索引擎大多提供基於關鍵字的檢索,難以支持根據語義信息提出的查詢。
網絡爬蟲 網絡爬蟲
爲了解決上述問題,定向抓取相關網頁資源的聚焦爬蟲應運而生。聚焦爬蟲是一個自動下載網頁的程序,它根據既定的抓取目標,有選擇的訪問萬維網上的網頁與相關的連接,獲取所須要的信息。與通用爬蟲(general purpose web crawler)不一樣,聚焦爬蟲並不追求大的覆蓋,而將目標定爲抓取與某一特定主題內容相關的網頁,爲面向主題的用戶查詢準備數據資源。
1 聚焦爬蟲工做原理以及關鍵技術概述
網絡爬蟲是一個自動提取網頁的程序,它爲搜索引擎從萬維網上下載網頁,是搜索引擎的重要組成。傳統爬蟲從一個或若干初始網頁的URL開始,得到初始網頁上的URL,在抓取網頁的過程當中,不斷從當前頁面上抽取新的URL放入隊列,直到知足系統的必定中止條件。聚焦爬蟲的工做流程較爲複雜,須要根據必定的網頁分析算法過濾與主題無關的連接,保留有用的連接並將其放入等待抓取的URL隊列。而後,它將根據必定的搜索策略從隊列中選擇下一步要抓取的網頁URL,並重覆上述過程,直到達到系統的某一條件時中止。另外,全部被爬蟲抓取的網頁將會被系統存貯,進行必定的分析、過濾,並創建索引,以便以後的查詢和檢索;對於聚焦爬蟲來講,這一過程所獲得的分析結果還可能對之後的抓取過程給出反饋和指導。
相對於通用網絡爬蟲,聚焦爬蟲還須要解決三個主要問題:
(1) 對抓取目標的描述或定義;
(2) 對網頁或數據的分析與過濾;
(3) 對URL的搜索策略。
 

面臨的問題

截止到 2007 年末,Internet 上網頁數量超出 160 億個,研究代表接近 30%的頁面是重複的;動態頁面的存在:客戶端、服務器端腳本語言的應用使得指向相同 Web 信息的 URL 數量呈指數級增加。 上述特徵使得網絡爬蟲面臨必定的困難,主要體如今 Web 信息的巨大容量使得爬蟲在給定時間內只能下載少許網頁。 Lawrence 和 Giles 的研究代表沒有哪一個搜索引擎可以索引超出 16%的Internet 上 Web 頁面,即便可以提取所有頁面,也沒有足夠的空間來存儲[1]  。
爲提升爬行效率,爬蟲須要在單位時間內儘量多的獲取高質量頁面,是它面臨的難題之一。 當前有五種表示頁面質量高低的方式[1]:Similarity(頁面與爬行主題之間的類似度)、Backlink(頁面在 Web 圖中的入度大小)、PageRank(指向它的全部頁面平均權值之和)、Forwardlink(頁面在 Web 圖中的出度大小)、Location(頁面的信息位置);Parallel(並行性問題)[3]。 爲了提升爬行速度,網絡一般會採起並行爬行的工做方式,隨之引入了新的問題:重複性(並行運行的爬蟲或爬行線程同時運行時增長了重複頁面)、質量問題(並行運行時,每一個爬蟲或爬行線程只能獲取部分頁面,致使頁面質量降低)、通訊帶寬代價(並行運行時,各個爬蟲或爬行線程之間不可避免要進行一些通訊)。 並行運行時,網絡爬蟲一般採用三種方式:獨立方式(各個爬蟲獨立爬行頁面,互不通訊)、動態分配方式(由一箇中央協調器動態協調分配 URL 給各個爬蟲)、靜態分配方式(URL 事先劃分給各個爬蟲)[1]  。
 

分類

網絡爬蟲按照系統結構和實現技術,大體能夠分爲如下幾種類型:通用網絡爬蟲(General Purpose Web Crawler)、聚焦網絡爬蟲(Focused Web Crawler)、增量式網絡爬蟲(Incremental Web Crawler)、深層網絡爬蟲(Deep Web Crawler)。 實際的網絡爬蟲系統一般是幾種爬蟲技術相結合實現的[1]  。
通用網絡爬蟲
通用網絡爬蟲又稱全網爬蟲(Scalable Web Crawler),爬行對象從一些種子 URL 擴充到整個 Web,主要爲門戶站點搜索引擎和大型 Web 服務提供商採集數據。 因爲商業緣由,它們的技術細節不多公佈出來。 這類網絡爬蟲的爬行範圍和數量巨大,對於爬行速度和存儲空間要求較高,對於爬行頁面的順序要求相對較低,同時因爲待刷新的頁面太多,一般採用並行工做方式,但須要較長時間才能刷新一次頁面。 雖然存在必定缺陷,通用網絡爬蟲適用於爲搜索引擎搜索普遍的主題,有較強的應用價值[1]  。
通用網絡爬蟲的結構大體能夠分爲頁面爬行模塊 、頁面分析模塊、連接過濾模塊、頁面數據庫、URL 隊列、初始 URL 集合幾個部分。爲提升工做效率,通用網絡爬蟲會採起必定的爬行策略。 經常使用的爬行策略有:深度優先策略、廣度優先策略[1]  。
1) 深度優先策略:其基本方法是按照深度由低到高的順序,依次訪問下一級網頁連接,直到不能再深刻爲止。 爬蟲在完成一個爬行分支後返回到上一連接節點進一步搜索其它連接。 當全部連接遍歷完後,爬行任務結束。 這種策略比較適合垂直搜索或站內搜索, 但爬行頁面內容層次較深的站點時會形成資源的巨大浪費[1]  。
2) 廣度優先策略:此策略按照網頁內容目錄層次深淺來爬行頁面,處於較淺目錄層次的頁面首先被爬行。 當同一層次中的頁面爬行完畢後,爬蟲再深刻下一層繼續爬行。 這種策略可以有效控制頁面的爬行深度,避免遇到一個無窮深層分支時沒法結束爬行的問題,實現方便,無需存儲大量中間節點,不足之處在於需較長時間才能爬行到目錄層次較深的頁面[1]  。
聚焦網絡爬蟲
 
聚焦網絡爬蟲(Focused Crawler),又稱主題網絡爬蟲(Topical Crawler),是指選擇性地爬行那些與預先定義好的主題相關頁面的網絡爬蟲[8]。 和通用網絡爬蟲相比,聚焦爬蟲只須要爬行與主題相關的頁面,極大地節省了硬件和網絡資源,保存的頁面也因爲數量少而更新快,還能夠很好地知足一些特定人羣對特定領域信息的需求[1]  。
聚焦網絡爬蟲和通用網絡爬蟲相比,增長了連接評價模塊以及內容評價模塊。聚焦爬蟲爬行策略實現的關鍵是評價頁面內容和連接的重要性,不一樣的方法計算出的重要性不一樣,由此致使連接的訪問順序也不一樣[1]  。
1) 基於內容評價的爬行策略:DeBra將文本類似度的計算方法引入到網絡爬蟲中,提出了 Fish Search 算法,它將用戶輸入的查詢詞做爲主題,包含查詢詞的頁面被視爲與主題相關,其侷限性在於沒法評價頁面與主題相關 度 的 高 低 。 Herseovic對 Fish Search 算 法 進 行 了 改 進 ,提 出 了 Sharksearch 算法,利用空間向量模型計算頁面與主題的相關度大小[1]  。
2) 基於連接結構評價的爬行策略 :Web 頁面做爲一種半結構化文檔,包含不少結構信息,可用來評價連接重要性。 PageRank 算法最初用於搜索引擎信息檢索中對查詢結果進行排序,也可用於評價連接重要性,具體作法就是每次選擇 PageRank 值較大頁面中的連接來訪問。 另外一個利用 Web結構評價連接價值的方法是 HITS 方法,它經過計算每一個已訪問頁面的 Authority 權重和 Hub 權重,並以此決定連接的訪問順序[1]  。
3) 基於加強學習的爬行策略:Rennie 和 McCallum 將加強學習引入聚焦爬蟲,利用貝葉斯分類器,根據整個網頁文本和連接文本對超連接進行分類,爲每一個連接計算出重要性,從而決定連接的訪問順序[1]  。
4) 基於語境圖的爬行策略:Diligenti 等人提出了一種經過創建語境圖(Context Graphs)學習網頁之間的相關度,訓練一個機器學習系統,經過該系統可計算當前頁面到相關 Web 頁面的距離,距離越近的頁面中的連接優先訪問。印度理工大學(IIT)和 IBM 研究中心的研究人員開發了一個典型的聚焦網絡爬蟲。 該爬蟲對主題的定義既不是採用關鍵詞也不是加權矢量,而是一組具備相同主題的網頁。 它包含兩個重要模塊:一個是分類器,用來計算所爬行的頁面與主題的相關度,肯定是否與主題相關;另外一個是淨化器,用來識別經過較少連接鏈接到大量相關頁面的中心頁面[1]  。
增量式網絡爬蟲
增量式網絡爬蟲(Incremental Web Crawler)是 指 對 已 下 載 網 頁 採 取 增 量式更新和只爬行新產生的或者已經發生變化網頁的爬蟲,它可以在必定程度上保證所爬行的頁面是儘量新的頁面。 和週期性爬行和刷新頁面的網絡爬蟲相比,增量式爬蟲只會在須要的時候爬行新產生或發生更新的頁面 ,並不從新下載沒有發生變化的頁面,可有效減小數據下載量,及時更新已爬行的網頁,減少時間和空間上的耗費,可是增長了爬行算法的複雜度和實現難度。增量式網絡爬蟲的體系結構[包含爬行模塊、排序模塊、更新模塊、本地頁面集、待爬行 URL 集以及本地頁面URL 集[1]  。
增量式爬蟲有兩個目標:保持本地頁面集中存儲的頁面爲最新頁面和提升本地頁面集中頁面的質量。 爲實現第一個目標,增量式爬蟲須要經過從新訪問網頁來更新本地頁面集中頁面內容,經常使用的方法有:1) 統一更新法:爬蟲以相同的頻率訪問全部網頁,不考慮網頁的改變頻率;2) 個體更新法:爬蟲根據個體網頁的改變頻率來從新訪問各頁面;3) 基於分類的更新法:爬蟲根據網頁改變頻率將其分爲更新較快網頁子集和更新較慢網頁子集兩類,而後以不一樣的頻率訪問這兩類網頁[1]  。
爲實現第二個目標,增量式爬蟲須要對網頁的重要性排序,經常使用的策略有:廣度優先策略、PageRank 優先策略等。IBM 開發的 WebFountain是一個功能強大的增量式網絡爬蟲,它採用一個優化模型控制爬行過程,並無對頁面變化過程作任何統計假設,而是採用一種自適應的方法根據先前爬行週期裏爬行結果和網頁實際變化速度對頁面更新頻率進行調整。北京大學的天網增量爬行系統旨在爬行國內 Web,將網頁分爲變化網頁和新網頁兩類,分別採用不一樣爬行策略。 爲緩解對大量網頁變化歷史維護致使的性能瓶頸,它根據網頁變化時間局部性規律,在短時期內直接爬行屢次變化的網頁 ,爲儘快獲取新網頁,它利用索引型網頁跟蹤新出現網頁[1]  。
Deep Web 爬蟲
Web 頁面按存在方式能夠分爲表層網頁(Surface Web)和深層網頁(Deep Web,也稱 Invisible Web Pages 或 Hidden Web)。 表層網頁是指傳統搜索引擎能夠索引的頁面,以超連接能夠到達的靜態網頁爲主構成的 Web 頁面。Deep Web 是那些大部份內容不能經過靜態連接獲取的、隱藏在搜索表單後的,只有用戶提交一些關鍵詞才能得到的 Web 頁面。例如那些用戶註冊後內容纔可見的網頁就屬於 Deep Web。 2000 年 Bright Planet 指出:Deep Web 中可訪問信息容量是 Surface Web 的幾百倍,是互聯網上最大、發展最快的新型信息資源[1]  。
Deep Web 爬蟲體系結構包含六個基本功能模塊 (爬行控制器、解析器、表單分析器、表單處理器、響應分析器、LVS 控制器)和兩個爬蟲內部數據結構(URL 列表、LVS 表)。 其中 LVS(Label Value Set)表示標籤/數值集合,用來表示填充表單的數據源[1]  。
Deep Web 爬蟲爬行過程當中最重要部分就是表單填寫,包含兩種類型:
1) 基於領域知識的表單填寫:此方法通常會維持一個本體庫,經過語義分析來選取合適的關鍵詞填寫表單。 Yiyao Lu[25]等人提出一種獲取 Form 表單信息的多註解方法,將數據表單按語義分配到各個組中 ,對每組從多方面註解,結合各類註解結果來預測一個最終的註解標籤;鄭鼕鼕等人利用一個預約義的領域本體知識庫來識別 Deep Web 頁面內容, 同時利用一些來自 Web 站點導航模式來識別自動填寫表單時所需進行的路徑導航[1]  。
2) 基於網頁結構分析的表單填寫: 此方法通常無領域知識或僅有有限的領域知識,將網頁表單表示成 DOM 樹,從中提取表單各字段值。 Desouky 等人提出一種 LEHW 方法,該方法將 HTML 網頁表示爲DOM 樹形式,將表單區分爲單屬性表單和多屬性表單,分別進行處理;孫彬等人提出一種基於 XQuery 的搜索系統,它可以模擬表單和特殊頁面標記切換,把網頁關鍵字切換信息描述爲三元組單元,按照必定規則排除無效表單,將 Web 文檔構形成 DOM 樹,利用 XQuery 將文字屬性映射到表單字段[1]  。
Raghavan 等人提出的 HIWE 系統中,爬行管理器負責管理整個爬行過程,分析下載的頁面,將包含表單的頁面提交表單處理器處理,表單處理器先從頁面中提取表單,從預先準備好的數據集中選擇數據自動填充並提交表單,由爬行控制器下載相應的結果頁面[1]  。
 

抓取目標的描述和定義

抓取目標的描述和定義是決定網頁分析算法與URL搜索策略如何制訂的基礎。而網頁分析算法和候選URL排序算法是決定搜索引擎所提供的服務形式和爬蟲網頁抓取行爲的關鍵所在。這兩個部分的算法又是緊密相關的。
現有聚焦爬蟲對抓取目標的描述可分爲基於目標網頁特徵、基於目標數據模式和基於領域概念3種。
 

基於目標網頁特徵

基於目標網頁特徵的爬蟲所抓取、存儲並索引的對象通常爲網站或網頁。根據種子樣本獲取方式可分爲:
(1) 預先給定的初始抓取種子樣本;
(2) 預先給定的網頁分類目錄和與分類目錄對應的種子樣本,如Yahoo!分類結構等;
(3) 經過用戶行爲肯定的抓取目標樣例,分爲:
(a) 用戶瀏覽過程當中顯示標註的抓取樣本;
(b) 經過用戶日誌挖掘獲得訪問模式及相關樣本。
其中,網頁特徵能夠是網頁的內容特徵,也能夠是網頁的連接結構特徵,等等。
 

基於目標數據模式

基於目標數據模式的爬蟲針對的是網頁上的數據,所抓取的數據通常要符合必定的模式,或者能夠轉化或映射爲目標數據模式。
 

基於領域概念

另外一種描述方式是創建目標領域的本體或詞典,用於從語義角度分析不一樣特徵在某一主題中的重要程度。
 

網頁搜索策略

網頁的抓取策略能夠分爲深度優先、廣度優先和最佳優先三種。深度優先在不少狀況下會致使爬蟲的陷入(trapped)問題,目前常見的是廣度優先和最佳優先方法。
 

廣度優先搜索

廣度優先搜索策略是指在抓取過程當中,在完成當前層次的搜索後,才進行下一層次的搜索。該算法的設計和實現相對簡單。在目前爲覆蓋儘量多的網頁,通常使用廣度優先搜索方法。也有不少研究將廣度優先搜索策略應用於聚焦爬蟲中。其基本思想是認爲與初始URL在必定連接距離內的網頁具備主題相關性的機率很大。另一種方法是將廣度優先搜索與網頁過濾技術結合使用,先用廣度優先策略抓取網頁,再將其中無關的網頁過濾掉。這些方法的缺點在於,隨着抓取網頁的增多,大量的無關網頁將被下載並過濾,算法的效率將變低。
 

最佳優先搜索

最佳優先搜索策略按照必定的網頁分析算法,預測候選URL與目標網頁的類似度,或與主題的相關性,並選取評價最好的一個或幾個URL進行抓取。它只訪問通過網頁分析算法預測爲「有用」的網頁。存在的一個問題是,在爬蟲抓取路徑上的不少相關網頁可能被忽略,由於最佳優先策略是一種局部最優搜索算法。所以須要將最佳優先結合具體的應用進行改進,以跳出局部最優勢。將在第4節中結合網頁分析算法做具體的討論。研究代表,這樣的閉環調整能夠將無關網頁數量下降30%~90%。
 

深度優先搜索

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

網頁分析算法

網頁分析算法能夠概括爲基於網絡拓撲、基於網頁內容和基於用戶訪問行爲三種類型。
 

拓撲分析算法

基於網頁之間的連接,經過已知的網頁或數據,來對與其有直接或間接連接關係的對象(能夠是網頁或網站等)做出評價的算法。又分爲網頁粒度、網站粒度和網頁塊粒度這三種。
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. 爬行策略
下述的三種網絡特徵,形成了設計網頁爬蟲抓取策略變得很難:
 它巨大的數據量;
 它快速的更新頻率;
 動態頁面的產生
它們三個特徵一塊兒產生了不少種類的爬蟲抓取連接。
巨大的數據量暗示了爬蟲,在給定的時間內,只能夠抓取所下載網絡的一部分,因此,它須要對它的抓取頁面設置優先級;快速的更新頻率說明在爬蟲抓取下載某網站一個網頁的時候,頗有可能在這個站點又有新的網頁被添加進來,或者這個頁面被更新或者刪除了。
最近新增的不少頁面都是經過服務器端腳本語言產生的,無窮的參數組合也增長了爬蟲抓取的難度,只有一小部分這種組合會返回一些獨特的內容。例如,一個很小照片存儲庫僅僅經過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。平衡禮貌方面考慮到了第2、三級網域,由於第三級網域一般也會保存在同一個網絡服務器上。
 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等。
相關文章
相關標籤/搜索