本文尝试使用 Nutch 0.8.1 来为几个指定的网站建立全文索引,且不使用 Hadoop 提供的分布式能力,只是简单地在一台单独的机器上完成索引工作。如果需要使用 Nutch 的分布式能力,需要熟悉一下 Hadoop.
约定 Nutch 部署后的目录结构如下:
/home/hys/nutch-deployed
/nutch-0.8.1
(Nutch 0.8.1 installation goes here)
/nutch-0.8.1-web
(Nutch web module for searching goes here)
1. Setting environment variable(s)
$ export NUTCH_JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun-1.5.0.08
$ export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun-1.5.0.08
$ export NUTCH_HOME=/home/hys/nutch-deployed/nutch-0.8.1
注:环境变量 $NUTCH_HOME 并非必须的,我增加此变量只是为了行文方便。
2. Basic configurations
解开 Nutch 的下载包后在 conf 目录下可以发现很多配置文件,就本文简单的应用来说,只有 nutch-default.xml 和 nutch-site.xml 需要关注。在这里, nutch-default.xml 是各项默认值的设定,非常不推荐直接修改该文件。如果有某些项需要重新设置,那么就在 nutch-site.xml 重新设置它,对于相同项, nutch-site.xml 会覆盖 nutch-default.xml 。因为 nutch-site.xml 是 final resource ,而 nutch-default.xml 是 default resource 。 Nutch 是基于 Hadoop 框架构建的,所以它也继承了 Hadoop 的这种配置方法。
$ cd $NUTCH_HOME
$ vi conf/nutch-site.xml
以下是我的配置清单:
<property>
<name>http.agent.name</name>
<value>NovaCrawler</value>
</property><property>
<name>http.agent.description</name>
<value>A crawler from Tinova for testing purpose</value>
</property><property>
<name>http.agent.url</name>
<value>http://huang.yunsong.net</value>
</property><property>
<name>http.agent.email</name>
<value>huangyunsong at gmail dot com</value>
</property><property>
<name>http.agent.version</name>
<value>1.0</value>
</property>
4. Specifying root URL(s) for crawling
在 $NUTCH_HOME 下创建一个文件夹,该文件夹中包含一些文本文件,每个文本文件都包含一个爬行起始地址。这里的文件夹名、文件名皆任意。
$ mkdir urls
$ cd urls
$ vi hysblog
http://huang.yunsong.net
$ vi hlyy
http://www.openow.net/home.nv
5. Setting filters for crawling
配置文件是 $NUTCH_HOME/conf/crawl-urlfilter.txt ,在该文件中分别使用 +/- 符号来表示 accept/skip ,文件中有详细的注释说明。对于本文来说,仅仅需要接受来自 www.openow.net 和 huang.yunsong.net 的页面,如下:
+^http://www.openow.net/
+^http://huang.yunsong.net/
6. Crawling
Nutch 提供了一个很好的脚本 nutch ,它的 crawl 指令就是用来执行爬行的。
$ bin/nutch crawl urls -dir crawl
以上指令中:
urls 就是在第4步中创建的用来包含爬行起点的目录
-dir crawl (可选)将会把爬行结果放到 $NUTCH_HOME/crawl/ 目录中。注,这个目录必须不存在。
还有三个可选参数:
-depth 3 (可选)指定爬行深度为3。
-topN 50 (可选)指定在每一级上最多攫取的页面数为50
-threads 2 (可选)指定并发线程数为2
7. Recrawling (Updating index library)
// TODO
8. Searching
Nutch 默认提供了一个 web module for searching ,虽然很简陋,不过能用、能说明问题。当然,可以自己重新开发一个 web module 来构建 web 搜索接口。
将 nutch-0.8.1.war 文件解压到目录 nutch-0.8.1-web ,然后在 tomcat 的配置目录 conf/Catalina/localhost 中增加一个配置文件 nutch.xml ,其内容为:
<Context docBase="/home/hys/nutch-deployed/nutch-0.8.1-web" reloadable="true" />
启动 tomcat 即可。注意:
1,因为默认情况下,该 Nutch web module 会认为索引库位于 ./crawl ,所以启动 tomcat 时需要切换当前目录到 $NUTCH_HOME
2,别忘记在 server.xml 的 Connector 定义部分加上 URIEncoding="UTF-8"
$ cd $NUTCH_HOME
$ /opt/tomcat-5.5.20/bin/startup.sh
好了,打开 http://localhost:8080/nutch 试试搜索吧。