為了解決上述問題,定向抓取相關網頁資源的聚焦爬蟲應運而生。聚焦爬蟲是一個自動下載網頁的程式,它根據既定的抓取目標,有選擇的訪問全球資訊網上的網頁與相關的連結,獲取所需要的信息。與通用爬蟲(general purpose web crawler)不同,聚焦爬蟲並不追求大的覆蓋,而將目標定為抓取與某一特定主題內容相關的網頁,為面向主題的用戶查詢準備數據資源。
截止到 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 服務提供商採集數據。 由於商業原因,它們的技術細節很少公布出來。 這類網路爬蟲的爬行範圍和數量巨大,對於爬行速度和存儲空間要求較高,對於爬行頁面的順序要求相對較低,同時由於待刷新的頁面太多,通常採用並行工作方式,但需要較長時間才能刷新一次頁面。 雖然存在一定缺陷,通用網路爬蟲適用於為搜尋引擎搜尋廣泛的主題,有較強的套用價值。
4) 基於語境圖的爬行策略:Diligenti 等人提出了一種通過建立語境圖(Context Graphs)學習網頁之間的相關度,訓練一個機器學習系統,通過該系統可計算當前頁面到相關 Web 頁面的距離,距離越近的頁面中的連結優先訪問。印度理工大學(IIT)和 IBM 研究中心的研究人員開發了一個典型的聚焦網路爬蟲。 該爬蟲對主題的定義既不是採用關鍵字也不是加權矢量,而是一組具有相同主題的網頁。 它包含兩個重要模組:一個是分類器,用來計算所爬行的頁面與主題的相關度,確定是否與主題相關;另一個是淨化器,用來識別通過較少連結連線到大量相關頁面的中心頁面。
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 將文字屬性映射到表單欄位。
Cho等人(Cho et al,1998)做了第一份抓取策略的研究。他們的數據是史丹福大學網站中的18萬個頁面,使用不同的策略分別模仿抓取。排序的方法使用了廣度優先,後鏈計數,和部分pagerank算法。計算顯示,如果你想要優先下載pagerank高的頁面,那么,部分PageRank策略是比較好的,其次是廣度優先和後鏈計數。並且,這樣的結果僅僅是針對一個站點的。
Najork和Wiener (Najork and Wiener, 2001)採用實際的爬蟲,對3.28億個網頁,採用廣度優先研究。他們發現廣度優先會較早的抓到PageRank高的頁面(但是他們沒有採用其他策略進行研究)。作者給出的解釋是:“最重要的頁面會有很多的主機連線到他們,並且那些連結會較早的發現,而不用考慮從哪一個主機開始。”
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頁面開始檢索的方法,疊代次數明顯小於使用隨機種子的檢索。使用這種方式,可以從以前抓取頁面之中找到好的種子,使用這些種子是十分有效的。
爬蟲所抓取頁面的重要程度也可以表述成它與給定查詢之間相似程度的函式。網路爬蟲嘗試下載相似頁面,可以稱為聚焦檢索或者主題檢索。關於主題檢索和聚焦檢索的概念,最早是由Menczer(Menczer 1997; Menczer and Belew, 1998)和Chakrabarti等人首先提出來的(Chakrabarti et al., 1999)。
Coffman等人(Edward G. Coffman,1998)是從事爬蟲對象定義的,他們提出了一個相當於新鮮度的概念,但是使用了不同的措詞:他們建議爬蟲必須最小化過時頁面部分。他們指出網路爬行的問題就相當於多個佇列,一個投票系統;這裡,爬蟲是伺服器,不同的站點是佇列。頁面修改是到達的顧客,頁面切換的時間是頁面進入一個單一站點的間隔。在這個模型下,每一個顧客在投票系統的平均時間,相當於爬蟲的平均過時性。
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]找到。