原文 http://blog.sina.com.cn/u/5595d514010008io
nutch是一个非常不错的项目,由于最近我需要对一些内部的文档和站点建一个search的站点,所以又开始了nutch的旅程。不过这次是坎坎坷坷, 尽把问题出在了小地方了。当然,也有很久没有再用过nutch了,之前哪次还是一年前的事了。现在的0.8.1变化也是很大。本文所讲述的版本都是基于 0.8.1来讲的。与0.8相比了一下,从抓取和log以及安装nutch还是比较简单的,从apache的网站上去下哪个66M之大的包包:
http://lucene.apache.org/nutch/release/
另外,你还可以使用Luke来验证你的index,并通过它来进行深入的查询:
http://www.getopt.org/luke/
我还特别的安装一个tomcat来让大家上nutch来“google一把”的感觉,这样你也需要下一个tomcat(其实只要是一个servlet容器就好):
http://tomcat.apache.org/download-55.cgi
简单的说明一下各文件:
apache-tomcat-5.5.20.tar.gz
nutch-0.8.1.tar.gz
lukeall-0.7.jar
另外,我的操作系统是Mac OSX 10.4.8,JDK版本为1.5.0_07。
我把tomcat和nutch解到了~/japp目录中:
/Users/HD/japp/apache-tomcat-5.5.20
/Users/HD/japp/nutch-0.8.1
首先需要简单的设置一些环境变量,我在home的.profile中加入了以下设置:
export JAVA_HOME=/usr
export NUTCH_HOME=/Users/HD/japp/nutch-0.8.1
好了,开始我们的正式工作罢。
首先,把我们要抓取的网站的起始地址加入到nutch中去:
cd $NUTCH_HOME
mkdir urls
echo 'http://lucene.apache.org/nutch/' > urls/nutch
你可以建一个目录,目录中的每一个文件中的每一行都是一个站点的“起抓页”。nutch会从这些url中开抓的。 :)
同时你需要告诉nutch,有哪些url被适配时,抓取到索引库中来。编辑conf目录中的crawl-urlfilter.txt文件,将MY.DOMAIN.NAME换为你想被抓进来的站点的名字,比如我是这样写的:
# accept hosts in MY.DOMAIN.NAME
+^http://([a-z0-9]*\.)*apache.org/
+^http://([a-z0-9]*\.)*woodpecker.org.cn/
这样,所有可以适配上这两个规则的网页都会被抓取下来。
最后还需要将抓取网页时提交的一些信息,必须要配置的属性是http.agent.name。设置的文件是conf中的nutch-site.xml:
http.agent.name
HD nutch agent
其它还可选的有http.agent.url、http.agent.email、http.agent.version。设置好这些属性,对于被抓取的站点来讲是十分友好的行为,所以最好设置。
我们可以开抓了:
cd $NUTCH_HOME
bin/nutch crawl urls -dir crawl -depth 5 -topN 50
我们需要使用crawl命令进行抓取。urls参数是存放抓取起始点的目录。-dir参数说明了抓取后的存储目录。-depth参数说明了抓取的层级深度。而-topN说明了一个层级抓取网页的数量。
执行这个命令需要一点时间,结束时可以看到这样的输出:
我们可以看到index被增加到了crawl/indexes目录中。还可以看看存储数据的目录结构:
你可以看到index目录中的文件,如果没有这些,说明设置有了问题了。
双击一下lukeall-0.7.jar,我们来打开索引:
还可以看看我们抓到了什么:
当然,你还可以在库中进行查询:
不过要注意,查询条件的输入还不能良好的支持中文,不知是osx的问题还是lukeall的问题。 :(
一切都验证好了,我们来建一个搜索的站点罢。
cd ~/japp/apache-tomcat-5.5.20/webapps
rm -rf *
mkdri ROOT
cd ROOT
cp $NUTCH_HOME/nutch-0.8.1.war .
jar xvf nutch-0.8.1.war
rm nutch-0.8.1.war
因为偶们会用中文查,所以需要把URI Encode改为UTF-8。编辑tomcat的conf目录中的server.xml,找到8080 port的connector段加入URIEncoding="UTF-8",如下:
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
URIEncoding="UTF-8" />
来启动我们搜索站点罢:
cd $NUTCH_HOME
~/japp/apache-tomcat-5.5.20/bin/startup.sh
打开浏览器,定位到 http://localhost:8080 :
查询一下英文:
查询一下中文,我自己索引了一个中文站 :)
除了右上角出现了中文的乱码,其它好像都还不错哟。 :)