網路爬蟲(爬蟲程式)

網路爬蟲

爬蟲程式一般指本詞條

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

基本介紹

  • 中文名:網路爬蟲
  • 外文名:web crawler
  • 別稱:網路蜘蛛
  • 目的:按要求獲取全球資訊網信息
產生背景,面臨的問題,分類,抓取目標分類,網頁搜尋策略,廣度優先搜尋,最佳優先搜尋,深度優先搜尋,網頁分析算法,補充,

產生背景

隨著網路的迅速發展,全球資訊網成為大量信息的載體,如何有效地提取並利用這些信息成為一個巨大的挑戰。搜尋引擎(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]:Similarity(頁面與爬行主題之間的相似度)、Backlink(頁面在 Web 圖中的入度大小)、PageRank(指向它的所有頁面平均權值之和)、Forwardlink(頁面在 Web 圖中的出度大小)、Location(頁面的信息位置);Parallel(並行性問題)[3]。 為了提高爬行速度,網路通常會採取並行爬行的工作方式,隨之引入了新的問題:重複性(並行運行的爬蟲或爬行執行緒同時運行時增加了重複頁面)、質量問題(並行運行時,每個爬蟲或爬行執行緒只能獲取部分頁面,導致頁面質量下降)、通信頻寬代價(並行運行時,各個爬蟲或爬行執行緒之間不可避免要進行一些通信)。 並行運行時,網路爬蟲通常採用三種方式:獨立方式(各個爬蟲獨立爬行頁面,互不通信)、動態分配方式(由一個中央協調器動態協調分配 URL 給各個爬蟲)、靜態分配方式(URL 事先劃分給各個爬蟲)。

分類

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

抓取目標分類

抓取目標的描述和定義是決定網頁分析算法與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。平衡禮貌方面考慮到了第二、三級網域,因為第三級網域通常也會保存在同一個網路伺服器上。
 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等。

相關詞條

熱門詞條

聯絡我們