前幾天看到盧亮的 Larbin 一種高效的搜索引擎爬蟲工具 一文提到 Nutch,很是感興趣,但一直沒有時間進行測試研究。趁著假期,先測試一下看看。用搜索引擎查找了一下,發(fā)現(xiàn)中文技術社區(qū)對 Larbin 的關注要遠遠大于 Nutch 。只有一年多前何東在他的竹筍炒肉中對 Nutch 進行了一下介紹。
Nutch vs Lucene
Lucene 不是完整的應用程序,而是一個用于實現(xiàn)全文檢索的軟件庫。
Nutch 是一個應用程序,可以以 Lucene 為基礎實現(xiàn)搜索引擎應用。
Nutch vs GRUB
GRUB 是一個分布式搜索引擎(參考)。用戶只能得到客戶端工具(只有客戶端是開源的),其目的在于利用用戶的資源建立集中式的搜索引擎。
Nutch 是開源的,可以建立自己內部網(wǎng)的搜索引擎,也可以針對整個網(wǎng)絡建立搜索引擎。自由(Free)而免費(Free)。
Nutch vs Larbin
"Larbin只是一個爬蟲,也就是說larbin只抓取網(wǎng)頁,至于如何parse的事情則由用戶自己完成。另外,如何存儲到數(shù)據(jù)庫以及建立索引的事情 larbin也不提供。[引自這里]
Nutch 則還可以存儲到數(shù)據(jù)庫并建立索引。
[引自這里]
Nutch 的早期版本不支持中文搜索,而最新的版本(2004-Aug-04 發(fā)布了 0.5)已經(jīng)做了很大的改進。相對先前的 0.4 版本,有 20 多項的改進,結構上也更具備擴展性。0.5 版經(jīng)過測試,對中文搜索支持的也很好。
下面是我的測試過程。
前提條件(這里Linux 為例,如果是 Windows 參見手冊):
- Java 1.4.x 。因為我的系統(tǒng)上安裝的Oracle 10g 已經(jīng)有 Java 了。設定環(huán)境變量:NUTCH_JAVA_HOME 。
[root@fc3 ~]# export NUTCH_JAVA_HOME=/u01/app/oracle/product/10.1.0/db_1/jdk/jre
- Tomcat 4.x 。從這里下載。
- 足夠的磁盤空間。我預留了 4G 的空間。
首先下載最新的穩(wěn)定版:
[root@fc3 ~]# wget http://www.nutch.org/release/nutch-0.5.tar.gz
解壓縮:
[root@fc3 ~]# tar -zxvf nutch-0.5.tar.gz ...... [root@fc3 ~]# mv nutch-0.5 nutch
測試一下 nutch 命令:
[root@fc3 nutch]# bin/nutch Usage: nutch COMMAND where COMMAND is one of: crawl one-step crawler for intranets admin database administration, including creation inject inject new urls into the database generate generate new segments to fetch fetchlist print the fetchlist of a segment fetch fetch a segment's pages dump dump a segment's pages index run the indexer on a segment's fetcher output merge merge several segment indexes dedup remove duplicates from a set of segment indexes updatedb update database from a segment's fetcher output mergesegs merge multiple segments into a single segment readdb examine arbitrary fields of the database analyze adjust database link-analysis scoring server run a search server or CLASSNAME run the class named CLASSNAME Most commands print help when invoked w/o parameters. [root@fc3 nutch]#
Nutch 的爬蟲有兩種方式
- 爬行企業(yè)內部網(wǎng)(Intranet crawling)。針對少數(shù)網(wǎng)站進行。用 crawl 命令。
- 爬行整個互聯(lián)網(wǎng)。 使用低層的 inject, generate, fetch 和 updatedb 命令。具有更強的可控制性。
以本站(http://www.dbanotes.net)為例,先進行一下針對企業(yè)內部網(wǎng)的測試。
在 nutch 目錄中創(chuàng)建一個包含該網(wǎng)站頂級網(wǎng)址的文件 urls ,包含如下內容:http://www.dbanotes.net/
然后編輯conf/crawl-urlfilter.txt 文件,設定過濾信息,我這里只修改了MY.DOMAIN.NAME:
# accept hosts in MY.DOMAIN.NAME +^http://([a-z0-9]*\.)*dbanotes.net/
運行如下命令開始抓取分析網(wǎng)站內容:
[root@fc3 nutch]# bin/nutch crawl urls -dir crawl.demo -depth 2 -threads 4 >& crawl.log
depth 參數(shù)指爬行的深度,這里處于測試的目的,選擇深度為 2 ;
threads 參數(shù)指定并發(fā)的進程 這是設定為 4 ;
在該命令運行的過程中,可以從 crawl.log 中查看 nutch 的行為以及過程:
...... 050102 200336 loading file:/u01/nutch/conf/nutch-site.xml 050102 200336 crawl started in: crawl.demo 050102 200336 rootUrlFile = urls 050102 200336 threads = 4 050102 200336 depth = 2 050102 200336 Created webdb at crawl.demo/db ...... 050102 200336 loading file:/u01/nutch/conf/nutch-site.xml 050102 200336 crawl started in: crawl.demo 050102 200336 rootUrlFile = urls 050102 200336 threads = 4 050102 200336 depth = 2 050102 200336 Created webdb at crawl.demo/db 050102 200336 Starting URL processing 050102 200336 Using URL filter: net.nutch.net.RegexURLFilter ...... 050102 200337 Plugins: looking in: /u01/nutch/plugins 050102 200337 parsing: /u01/nutch/plugins/parse-html/plugin.xml 050102 200337 parsing: /u01/nutch/plugins/parse-pdf/plugin.xml 050102 200337 parsing: /u01/nutch/plugins/parse-ext/plugin.xml 050102 200337 parsing: /u01/nutch/plugins/parse-msword/plugin.xml 050102 200337 parsing: /u01/nutch/plugins/query-site/plugin.xml 050102 200337 parsing: /u01/nutch/plugins/protocol-http/plugin.xml 050102 200337 parsing: /u01/nutch/plugins/creativecommons/plugin.xml 050102 200337 parsing: /u01/nutch/plugins/language-identifier/plugin.xml 050102 200337 parsing: /u01/nutch/plugins/query-basic/plugin.xml 050102 200337 logging at INFO 050102 200337 fetching http://www.dbanotes.net/ 050102 200337 http.proxy.host = null 050102 200337 http.proxy.port = 8080 050102 200337 http.timeout = 10000 050102 200337 http.content.limit = 65536 050102 200337 http.agent = NutchCVS/0.05 (Nutch; http://www.nutch.org/docs/en/bot.html; n utch-agent@lists.sourceforge.net) 050102 200337 fetcher.server.delay = 1000 050102 200337 http.max.delays = 100 050102 200338 http://www.dbanotes.net/: setting encoding to GB18030 050102 200338 CC: found http://creativecommons.org/licenses/by-nc-sa/2.0/ in rdf of http: //www.dbanotes.net/ 050102 200338 CC: found text in http://www.dbanotes.net/ 050102 200338 status: 1 pages, 0 errors, 12445 bytes, 1067 ms 050102 200338 status: 0.9372071 pages/s, 91.12142 kb/s, 12445.0 bytes/page 050102 200339 Updating crawl.demo/db 050102 200339 Updating for crawl.demo/segments/20050102200336 050102 200339 Finishing update 64,1 7% 050102 200337 parsing: /u01/nutch/plugins/query-basic/plugin.xml 050102 200337 logging at INFO 050102 200337 fetching http://www.dbanotes.net/ 050102 200337 http.proxy.host = null 050102 200337 http.proxy.port = 8080 050102 200337 http.timeout = 10000 050102 200337 http.content.limit = 65536 050102 200337 http.agent = NutchCVS/0.05 (Nutch; http://www.nutch.org/docs/en/bot.html; nutch-agent@lists.sourceforge.net) 050102 200337 fetcher.server.delay = 1000 050102 200337 http.max.delays = 100 ......
之后配置 Tomcat (我的 tomcat 安裝在 /opt/Tomcat) ,
[root@fc3 nutch]# rm -rf /opt/Tomcat/webapps/ROOT* [root@fc3 nutch]# cp nutch*.war /opt/Tomcat/webapps/ROOT.war [root@fc3 webapps]# cd /opt/Tomcat/webapps/ [root@fc3 webapps]# jar xvf ROOT.war [root@fc3 webapps]# ../bin/catalina.sh start
瀏覽器中輸入 http://localhost:8080 查看結果(遠程查看需要將 localhost 換成相應的IP):

搜索測試:

可以看到,Nutch 亦提供快照功能。下面進行中文搜索測試:

注意結果中的那個“評分詳解”,是個很有意思的功能(Nutch 具有一個鏈接分析模塊),通過這些數(shù)據(jù)可以進一步理解該算法。
考慮到帶寬的限制,暫時不對整個Web爬行的方式進行了測試了。值得一提的是,在測試的過程中,nutch 的爬行速度還是不錯的(相對我的糟糕帶寬)。
Nutch 目前還不支持 PDF(開發(fā)中,不夠完善) 與 圖片 等對象的搜索。中文分詞技術還不夠好,通過“評分詳解”可看出,對中文,比如“數(shù)據(jù)庫管理員”,是分成單獨的字進行處理的。但作為一個開源搜索引擎軟件,功能是可圈可點的。畢竟,主要開發(fā)者 Doug Cutting 就是開發(fā) Lucene 的大牛
參考信息
- Nutch Wiki - http://www.nutch.org/cgi-bin/twiki/view/Main/Nutch
- 何東的 試用Nutch
- 車東的 Lucene:基于Java的全文檢索引擎簡介