Nutch作为一款刚刚诞生的开元web搜索引警,提供了除商业搜索引警外的一种新的选择。个人,企业都可以通过Nutch来构建适合于自己的搜索引警平台,提供适合自己的搜索服务,而不必完全被动的接受商业搜索引警的各种制约。
Nutch的工作流程可以分为两个大的部分:抓取部分和搜索部分。抓取程序抓取页面并把抓取回来的数据进行反向索引,搜索程序则对反向索引进行搜索回答用户的请求,索引是联系这两者的纽带。
首先要建立一个空的url数据库,并且把起始根urls添加到url数据库中(步骤一),依据url数据库在新创建的segment中生成fetchlist,存放了待爬行的urls(步骤二),根据fetchlist从Internet进行相关网页内容的爬行抓取与下载(步骤三),随后把这些抓取到的内容解析成文本与数据库(步骤四),从中提取出新的网页连接url,并对url数据库进行更新(步骤五),重复步骤一到五直到达到被指定的爬行抓取深度。以上构成了Nutch的整个抓取过程,可以用一个循环来对其进行描述:生成-抓取-更新-循环。
当抓取过程完成后,对抓取到的网页进行反向索引,对重复的内容与url进行剔除,然后对多个索引进行合并,为搜索建立统一的索引库,而后用户可以通过由tomcat容器提供的Nutch用户界面提交搜索请求,然后由Lucene对索引库进行查询,并返回搜索结果给用户,完成整个搜索过程。
Nutch程序采用Java编写,其运行环境需要一个Tomcat容器。本文运行环境以j2sdk1.4.2-12及tomcat-5.0.28为例。
试用Nutch进行数据抓取。
Nutch通过运行网络爬虫工具进行网络内容的抓取,它提供了爬行企业内部网与整个互联网两种方式。
先说爬行企业内部网
爬行企业内部网适合于针对一小撮web服务器,并且网页数在百万以内的情况。它使用crawl命令进行网络爬行抓取,在进行爬行前,需要对Nutch进行一系列的配置,过程如下:
首先需要建立一个目录,并且在此目录中创建包含起始根urls的文件。我们以爬行sohu网站为例来讲述。
#cd /usr/local/nutch
#mkdir urls
#touch urls/sohu
因此文件urls/sohu的内容为:
http://www.sohu.com/。依据爬行网站的实际情况,可以继续在此文件末尾添加其它url或者在url目录里添加其它包含url的文件。需要注意的是Nutch7.0的版本中不需要创建目录,直接创建包含起始根url的文件即可。
接下来,要在config/crawl-urlfilter.txt文件,将中文MY.DOMAIN.NAME部分提环为准爬行的域名,并去掉前面的注释。因此在本文中进行域名替换后的形式为:
+^http://([a-z0-9]*\.)*sohu.com/
文件config/crawl-urlfilter.txt主要用于限定爬行的url形式,其中url的形式使用正则表达式进行描述。
然后,编辑文件conf/nutch-site.xml,并且包含以下内容:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>http:.agent.name</name>
<value>sohu.com</value>
<description>sohu.com</description>
</property>
</configuration>
除http.agent.name外,在<configuration></configuration>间还包括http.agent.description,http.agent.url,http.agent.email这三项。
最后开始爬行抓取。完成对Nutch的配置后,运行crawl命令进行爬行。在本文中爬行脚本为:
#bin/nutch crawl urls -dir sohu -depth 5 -topN 1000
另外,crawl还有一个参数项:threads,他设定并行爬行的进程数。在爬行过程中,可以通过Nutch日志文件查看爬行的进展状态,爬行完成后结果存放在sohu目录里。
至此内部网的过程就完成了,爬行整个互联网将在下篇文章中讲解。