開源爬蟲Labin,Nutch,Heritrix介紹和對比

  
  
        

轉載原文:http://www.open-open.com/bbs/view/1325332257061/

從網上找了一些開源spider的相關資料,整理在下面:

 

-----------------------------------------------------------------------------------

**************

Larbin
開發語言:C++
http://larbin.sourceforge.net/index-eng.html
larbin是個基於C++的web爬蟲工具,擁有易於操作的界面,不過只能跑在LINUX下,在一臺普通PC下larbin每天可以爬5百萬個頁面(當然啦,需要擁有良好的網絡)

簡介

Larbin是一種開源的網絡爬蟲/網絡蜘蛛,由法國的年輕人 Sébastien Ailleret獨立開發。larbin目的是能夠跟蹤頁面的url進行擴展的抓取,最後爲搜索引擎提供廣泛的數據來源。
Larbin只是一個爬蟲,也就是說larbin只抓取網頁,至於如何parse的事情則由用戶自己完成。另外,如何存儲到數據庫以及建立索引的事情 larbin也不提供。
Latbin最初的設計也是依據設計簡單但是高度可配置性的原則,因此我們可以看到,一個簡單的larbin的爬蟲可以每天獲取500萬的網頁,非常高效。
     
功能
      1. larbin 獲取單個、確定網站的所有聯結,甚至可以鏡像一個網站。
      2. larbin建立 url 列表羣,例如針對所有的網頁進行 url retrive後,進行xml的聯結的獲取。或者是 mp3 。
      3. larbin 定製後可以作爲搜索引擎的信息的來源(例如可以將抓取下來的網頁每2000一組存放在一系列的目錄結構裏面)。

問題
Labin的主要問題是,:

僅提供保存網頁保存功能,沒有進行進一步的網頁解析;

不支持分佈式系統;

功能相對簡單,提供的配置項也不夠多;

不支持網頁自動重訪,更新功能;

從2003年底以後,Labin已經放棄更新,目前處於荒蕪長草的狀態

 

 

**********

Nutch
開發語言:Java
http://lucene.apache.org/nutch/

 

簡介:

Apache的子項目之一,屬於Lucene項目下的子項目。

Nutch是一個基於Lucene,類似Google的完整網絡搜索引擎解決方案,基於Hadoop的分佈式處理模型保證了系統的性能,類似Eclipse的插件機制保證了系統的可客戶化,而且很容易集成到自己的應用之中。
 總體上Nutch可以分爲2個部分:抓取部分和搜索部分。抓取程序抓取頁面並把抓取回來的數據做成反向索引,搜索程序則對反向索引搜索回答用戶的請求。抓取程序和搜索程序的接口是索引,兩者都使用索引中的字段。抓取程序和搜索程序可以分別位於不同的機器上。下面詳細介紹一下抓取部分。

抓取部分:
  抓取程序是被Nutch的抓取工具驅動的。這是一組工具,用來建立和維護幾個不同的數據結構: web database, a set of segments, and the index。下面逐個解釋這三個不同的數據結構:
    1、The web database, 或者WebDB。這是一個特殊存儲數據結構,用來映像被抓取網站數據的結構和屬性的集合。WebDB 用來存儲從抓取開始(包括重新抓取)的所有網站結構數據和屬性。WebDB 只是被 抓取程序使用,搜索程序並不使用它。WebDB 存儲2種實體:頁面 和 鏈接。頁面 表示 網絡上的一個網頁,這個網頁的Url作爲標示被索引,同時建立一個對網頁內容的MD5 哈希簽名。跟網頁相關的其它內容也被存儲,包括:頁面中的鏈接數量(外鏈接),頁面抓取信息(在頁面被重複抓取的情況下),還有表示頁面級別的分數 score 。鏈接 表示從一個網頁的鏈接到其它網頁的鏈接。因此 WebDB 可以說是一個網絡圖,節點是頁面,鏈接是邊。
    2、Segment 。這是網頁的集合,並且它被索引。Segment的Fetchlist 是抓取程序使用的url列表,它是從 WebDB中生成的。Fetcher 的輸出數據是從 fetchlist 中抓取的網頁。Fetcher的輸出數據先被反向索引,然後索引後的結果被存儲在segment 中。 Segment的生命週期是有限制的,當下一輪抓取開始後它就沒有用了。默認的 重新抓取間隔是30天。因此刪除超過這個時間期限的segment是可以的。而且也可以節省不少磁盤空間。Segment 的命名是日期加時間,因此很直觀的可以看出他們的存活週期。
    3、The index。索引庫是反向索引所有系統中被抓取的頁面,它並不直接從頁面反向索引產生,而是合併很多小的segment的索引產生的。Nutch 使用 Lucene 來建立索引,因此所有Lucene相關的工具 API 都用來建立索引庫。需要說明的是Lucene的segment 的概念和Nutch的segment概念是完全不同的,不要混淆。簡單來說 Lucene 的 segment 是 Lucene 索引庫的一部分,而Nutch 的Segment是WebDB中被抓取和索引的一部分。
抓取過程詳解:

      抓取是一個循環的過程:抓取工具從WebDB中生成了一個 fetchlist 集合;抽取工具根據fetchlist從網絡上下載網頁內容;工具程序根據抽取工具發現的新鏈接更新WebDB;然後再生成新的fetchlist;周而復始。這個抓取循環在nutch中經常指: generate/fetch/update 循環。
    一般來說同一域名下的 url 鏈接會被合成到同一個 fetchlist。這樣做的考慮是:當同時使用多個工具抓取的時候,不會產生重複抓取的現象。Nutch 遵循 Robots Exclusion Protocol, 可以用robots.txt 定義保護私有網頁數據不被抓去。
    上面這個抓取工具的組合是Nutch的最外層的,也可以直接使用更底層的工具,自己組合這些底層工具的執行順序達到同樣的結果。這是Nutch吸引人的地方。下面把上述過程分別詳述一下,括號內就是底層工具的名字:
    1、創建一個新的WebDB (admin db -create)。
    2、把開始抓取的跟Url 放入WebDb (inject)。
    3、從WebDb的新 segment 中生成 fetchlist (generate)。
    4、根據 fetchlist 列表抓取網頁的內容 (fetch)。
    5、根據抓取回來的網頁鏈接url更新 WebDB (updatedb)。
    6、重複上面3-5個步驟直到到達指定的抓取層數。
    7、用計算出來的網頁url權重 scores 更新 segments (updatesegs)。
    8、對抓取回來的網頁建立索引(index)。
    9、在索引中消除重複的內容和重複的url (dedup)。
    10、合併多個索引到一個大索引,爲搜索提供索引庫(merge)。

 

*****************

Heritrix
開發語言:Java
http://crawler.archive.org/
Heritrix是一個開源,可擴展的web爬蟲項目。Heritrix設計成嚴格按照robots.txt文件的排除指示和META robots標籤。


簡介

Heritrix與Nutch對比

和 Nutch。二者均爲Java開源框架,Heritrix 是 SourceForge上的開源產品,Nutch爲Apache的一個子項目,它們都稱作網絡爬蟲/蜘蛛( Web Crawler),它們實現的原理基本一致:深度遍歷網站的資源,將這些資源抓取到本地,使用的方法都是分析網站每一個有效的URI,並提交Http請求,從而獲得相應結果,生成本地文件及相應的日誌信息等。

Heritrix 是個 "archival crawler" -- 用來獲取完整的、精確的、站點內容的深度複製。包括獲取圖像以及其他非文本內容。抓取並存儲相關的內容。對內容來者不拒,不對頁面進行內容上的修改。重新爬行對相同的URL不針對先前的進行替換。爬蟲通過Web用戶界面啓動、監控、調整,允許彈性的定義要獲取的URL。

 

Nutch和Heritrix的差異:

Nutch 只獲取並保存可索引的內容。Heritrix則是照單全收。力求保存頁面原貌

Nutch 可以修剪內容,或者對內容格式進行轉換。

Nutch 保存內容爲數據庫優化格式便於以後索引;刷新替換舊的內容。而Heritrix 是添加(追加)新的內容。

Nutch 從命令行運行、控制。Heritrix 有 Web 控制管理界面。

Nutch 的定製能力不夠強,不過現在已經有了一定改進。Heritrix 可控制的參數更多。

Heritrix提供的功能沒有nutch多,有點整站下載的味道。既沒有索引又沒有解析,甚至對於重複爬取URL都處理不是很好。

Heritrix的功能強大 但是配置起來卻有點麻煩。

 

 

*********************

 

三者的比較
一、從功能方面來說,Heritrix與Larbin的功能類似。都是一個純粹的網絡爬蟲,提供網站的鏡像下載。而Nutch是一個網絡搜索引擎框架,爬取網頁只是其功能的一部分。

二、從分佈式處理來說,Nutch支持分佈式處理,而另外兩個好像尚且還沒有支持。

三、從爬取的網頁存儲方式來說,Heritrix和 Larbin都是將爬取下來的內容保存爲原始類型的內容。而Nutch是將內容保存到其特定格式的segment中去。

四,對於爬取下來的內容的處理來說,Heritrix和 Larbin都是將爬取下來的內容不經處理直接保存爲原始內容。而Nutch對文本進行了包括鏈接分析、正文提取、建立索引(Lucene索引)等處理。

五,從爬取的效率來說,Larbin效率較高,因爲其是使用c++實現的並且功能單一。

 

 

crawler

開發

語言

功能

單一

支持分佈式

爬取

效率

鏡像

保存

Nutch

Java

×

×

Larbin

C++

×

Heritrix

Java

×


-----------------------------------------------------------

 

其它一些開源爬蟲彙總:


WebSPHINX
WebSPHINX是一個Java類包和Web爬蟲的交互式開發環境。Web爬蟲(也叫作機器人或蜘蛛)是可以自動瀏覽與處理Web頁面的程序。WebSPHINX由兩部分組成:爬蟲工作平臺和WebSPHINX類包。
http://www.cs.cmu.edu/~rcm/websphinx/

WebLech
WebLech是一個功能強大的Web站點下載與鏡像工具。它支持按功能需求來下載web站點並能夠儘可能模仿標準Web瀏覽器的行爲。WebLech有一個功能控制檯並採用多線程操作。
http://weblech.sourceforge.net/
Arale
Arale主要爲個人使用而設計,而沒有像其它爬蟲一樣是關注於頁面索引。Arale能夠下載整個web站點或來自web站點的某些資源。Arale還能夠把動態頁面映射成靜態頁面。
http://web.tiscali.it/_flat/arale.jsp.html

J-Spider
J-Spider:是一個完全可配置和定製的Web Spider引擎.你可以利用它來檢查網站的錯誤(內在的服務器錯誤等),網站內外部鏈接檢查,分析網站的結構(可創建一個網站地圖),下載整個Web站點,你還可以寫一個JSpider插件來擴展你所需要的功能。
http://j-spider.sourceforge.net/

spindle
spindle 是一個構建在Lucene工具包之上的Web索引/搜索工具.它包括一個用於創建索引的HTTP spider和一個用於搜索這些索引的搜索類。spindle項目提供了一組JSP標籤庫使得那些基於JSP的站點不需要開發任何Java類就能夠增加搜索功能。
http://www.bitmechanic.com/projects/spindle/

Arachnid
Arachnid: 是一個基於Java的web spider框架.它包含一個簡單的HTML剖析器能夠分析包含HTML內容的輸入流.通過實現Arachnid的子類就能夠開發一個簡單的Web spiders並能夠在Web站上的每個頁面被解析之後增加幾行代碼調用。 Arachnid的下載包中包含兩個spider應用程序例子用於演示如何使用該框架。
http://arachnid.sourceforge.net/

LARM
LARM能夠爲Jakarta Lucene搜索引擎框架的用戶提供一個純Java的搜索解決方案。它包含能夠爲文件,數據庫表格建立索引的方法和爲Web站點建索引的爬蟲。
http://larm.sourceforge.net/

JoBo
JoBo 是一個用於下載整個Web站點的簡單工具。它本質是一個Web Spider。與其它下載工具相比較它的主要優勢是能夠自動填充form(如:自動登錄)和使用cookies來處理session。JoBo還有靈活的下載規則(如:通過網頁的URL,大小,MIME類型等)來限制下載。
http://www.matuschek.net/software/jobo/index.html

snoics-reptile
snoics -reptile是用純Java開發的,用來進行網站鏡像抓取的工具,可以使用配製文件中提供的URL入口,把這個網站所有的能用瀏覽器通過GET的方式獲取到的資源全部抓取到本地,包括網頁和各種類型的文件,如:圖片、flash、mp3、zip、rar、exe等文件。可以將整個網站完整地下傳至硬盤內,並能保持原有的網站結構精確不變。只需要把抓取下來的網站放到web服務器(如:Apache)中,就可以實現完整的網站鏡像。
http://www.blogjava.net/snoics

Web-Harvest
Web-Harvest是一個Java開源Web數據抽取工具。它能夠收集指定的Web頁面並從這些頁面中提取有用的數據。Web-Harvest主要是運用了像XSLT,XQuery,正則表達式等這些技術來實現對text/xml的操作。
http://web-harvest.sourceforge.net

spiderpy
spiderpy是一個基於Python編碼的一個開源web爬蟲工具,允許用戶收集文件和搜索網站,並有一個可配置的界面。
http://pyspider.sourceforge.net/

The Spider Web Network Xoops Mod Team
pider Web Network Xoops Mod是一個Xoops下的模塊,完全由PHP語言實現。
http://www.tswn.com/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章