spider技術綜述

轉自soso 出處:http://blog.csdn.net/soso_blog/archive/2010/07/28/5771350.aspx
Spider系統是搜索引擎當中進行互聯網上數據採集的一個核心子系統。在這個子系統當中,通常先種入一批種子Url,Spider對這些種子Url採集之後將鏈接提取入庫,然後再對新入庫的Url進行採集,並且負責對採集過的Url進行更新採集,如此循環。

隨着各種垂直搜索引擎的不斷髮展,整個Spider在功能上又分爲傳統的收集互聯網上所有數據的大Spider和服務於某個專門領域的聚焦Spider。兩類Spider的不同之處在於,後者需要一個過濾器來過濾掉那些專門領域不要的Url。從架構上來講,兩類Spider通常都會採用分佈式的架構。從技術實現上來說,Spider通常都會包括Url存儲庫,抓取調度模塊,頁面採集模塊,鏈接分析和抽取模塊,反垃圾模塊等幾個核心模塊。本文就Url存儲、抓取調度的主流技術和技術難點做一個簡單的描述。

1:Url存儲庫:近些年互聯網發展迅猛,互聯網上的Url數量也極爲龐大,所以對Url庫的核心要求之一就是可擴展性必須要很強,在爬行過程中Url數目逐步增大時,要能及時的進行擴展。另外一個要求就是能便於抓取調度技術的實施。當然,對容錯性和負責均衡方面也需要有充足的考慮。


2:抓取調度: 如果把Spider看成互聯網上的蜘蛛的話,抓取調度模塊就是蜘蛛的大腦,它會根據Url庫裏面收錄的Url的情況,來調度指揮蜘蛛先爬哪些Url,後爬哪些Url。對於一個Spider來說,有兩類調度需要處理,一類是未抓Url的抓取,一類是已抓Url的更新抓取。


未抓Url的抓取調度策略通常分爲如下三大類:深度優先抓取,廣度優先抓取和最優調度優先抓取。

深度優先抓取會在每個Site裏面一個分支一個分支的進行抓透。由於互聯網上很多站點都存在類似陷阱的情況,採用深度優先抓取通常容易在某個Site內陷入死循環。廣度優先通常會沿着某個Site的每一層來抓,先抓完一層然後再抓下一層。由於能有效避免深度優先抓取可能會陷入死循環的問題,廣度優先抓取得到了較爲廣泛的使用。然而,對於廣度優先抓取來說,要抓取到某個Site內層次比較深的高信息含量的數據,通常會比較困難。

爲了有效地避免上述問題,最優調度優先抓取的方法被Spider的一些研究人員提出。在這種調度方法中,通常會一邊抓取一邊進行抓取Url的質量評估,用已抓Url的質量來預估未抓Url集合當中每個Url的質量,然後使用這些質量因子對未抓Url進行排序,依據排序的結果來進行抓取調度,例如,通過抓取Url後形成的鏈接地圖計算PageRank之後,按照PageRank值的大小來進行排序等。


已抓Url的更新抓取是調度系統中的一個難點,一種最簡單的方法是將所有已經抓取過的Url設置一個下一次抓取的時間值,對其進行定期更新。然而,在互聯網上,各個站點的活躍度,同一個站點內的不同Url的更新活躍度都存在很大的差異。如果採用統一的值定期更新的方法,一方面活躍站點的活躍頁面通常會被更新不及時,這樣會造成一些鏈接的遺失和一部分索引數據的老化;另外一方面,不活躍站點的Url會造成大量的無效更新,降低了更新的效率。

一些技術文章曾經有過少量的介紹Google對不同的站點採用不同的更新週期,例如教育網當中的頁面更新週期會明顯長於一些商業網站。然而,在站點級別上進行區別是遠遠不夠的,調度當中最好能夠對單個的Url根據其屬性採用不同的更新週期,具體的做法值得深入研究。


抓取調度中的另一個難點是對每個Site的壓力評估,在這個方面,Google可能是行業的領先者,其優雅抓取的方式得到了大部分站點的認可。

壓力評估的一個困難在於互聯網上各個站點服務器能力的不同和服務架構的不同。大型的網站通常採用CDN的方式爲用戶服務,其服務能力超強,對於這些站點,Spider每天抓取上百萬的Url對其流量都影響不大。而一些小型站點通常採用服務器託管的方式,一方面帶寬有限,另外一個方面多個站點通常共用一個服務器,多站點的並行抓取通常會使得那些服務器癱瘓。

壓力評估的另外一個困難在於大部分的站點都會期望白天服務期間,Spider能儘量少抓取頁面;而到了晚上能多抓取頁面。這個期望看起來對Spider來說好像比較簡單,但事實並非如此,因爲活躍站點每天都會產生大量的新頁面,搜索引擎是希望能及時發現和收錄這些新頁面,目前對搜索引擎的要求甚至到了分鐘級別。而及時發現和收錄這些新頁面就涉及到如何才能精準的找到並且及時更新發布這些新頁面的父頁面,若精準性做的好,白天下載的量可以適量減少,否則就只能以量來補準了。

未抓的調度、已抓的更新,如何做到將新產生的高信息含量的數據及時的抓取下來,歡迎大家一起探討。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章