??? 由于信息所有很大的容量、帶寬資源閑置,要將其利用起來,在網絡上收集與特定領域相關的資料,這就需要使用到網羅爬蟲方面的技術了。在經過一段時間的調研之后,發現Apache已經有一個開源的搜索引擎---Nutch了,對其特定需求地改造將為我們節約了很多的時間與精力。
??? 在java.net社區中有兩篇文章對Nutch進行了詳盡的介紹。
Introduction to Nutch, Part 1: Crawling
Introduction to Nutch, Part 2: Searching
如有需求請好好研究它
??? 在nutch0.8的源代碼org.apache.nutch.crawl包中包含了nutch爬蟲最開始調用的類---cralw,在其main函數中,分別調用了
Injector(job).inject(crawlDb, rootUrlDir);
Generator(job).generate(crawlDb, segments, -1, topN, System.currentTimeMillis());
Fetcher(job).fetch(segment, threads, Fetcher.isParsing(job));
ParseSegment(job).parse(segment);
CrawlDb(job).update(crawlDb, segment);
LinkDb(job).invert(linkDb, segments);
Indexer(job).index(indexes, crawlDb, linkDb, fs.listPaths(segments));
DeleteDuplicates(job).dedup(new Path[] { indexes });
IndexMerger(fs, fs.listPaths(indexes), index, tmpDir, job).merge();
??? 以上方法,其中Generator、Fetcher、ParseSegment、CrawlDb是根據輸入的參數循環運行的,根據爬行日志我們可以看到各個類及其方法的調用過程。
??? Nutch是支持插件擴展的,這樣就可以滿足各個不同使用群體的特定需求,例如是要做垂直搜索,并收集特定信息的收集,那么我們可以在其nutch-default.xml文件中找到如下一段:
?1?<property>
?2???<name>plugin.includes</name>
?3???<value>protocol-http|urlfilter-regex|parse-(text|html|js)|index-basic|query-(basic|site|url)|summary-basic|scoring-opic</value>
?4???<description>Regular?expression?naming?plugin?directory?names?to
?5???include.??Any?plugin?not?matching?this?expression?is?excluded.
?6???In?any?case?you?need?at?least?include?the?nutch-extensionpoints?plugin.?By
?7???default?Nutch?includes?crawling?just?HTML?and?plain?text?via?HTTP,
?8???and?basic?indexing?and?search?plugins.
?9???</description>
10?</property>
11?
12?<property>
13???<name>plugin.excludes</name>
14???<value></value>
15???<description>Regular?expression?naming?plugin?directory?names?to?exclude.??
16???</description>
17?</property>

??? 并將plugin.includes拷貝到nutch-site.xml文件中,在plugin.includes的value中加入自己編寫的插件即可。
??? 要進行Nutch的二次開發,在國內首先要解決的問題是中文的分詞問題。這是各大搜索公司非常重視的問題,對于我現在所屬的單位來說,分詞的精度不需要達到那么高,能夠將特定領域中的詞語分析出來即可,而且對于本領域來說詞匯比較特殊,能夠很好的和其他詞匯區分開來,而且不容易有歧義發生,但是要求的分詞速度需要達到一定程度才能夠有實用價值。因此,多線程方面的分詞程序勢在必行,能夠達到每秒20萬字以上的分詞速度才能滿足一般需求。




本文依據《創作共用約定》之“署名-禁止派生-非商業用途”方式發布,即你可以免費拷貝、分發、呈現和表演當前作品,但是必須基于以下條款:

  • 署名:你必須明確標明作者的名字。

  • 非商業用途:你不可將當前作品用于商業目的。

  • 禁止派生:你不可更改、轉變或者基于此作品重新構造為新作品。

對于任何二次使用或分發,你必須讓其他人明確當前作品的授權條款。

在得到作者的明確允許下,這里的某些條款可以放棄。