Nutch是使用Java编写的高性能网络爬虫,常常和其他工具一起来创建搜索引擎。需要注意的是在开始使用Nutch之前,你必须已经安装好Java了。紧接着前往Nutch的页面下载Nutch 1.x。有src
和bin
两种版本可供下载,为了省去编译带来的麻烦,我们选择下载bin
版本。本文中使用的是截止本文发布时最新的Nutch 1.12,并且系统环境为Ubuntu 16.04。
1 修改配置文件
下载并解压完成之后进入Nutch目录下的conf
文件夹,此文件夹中保存着关于Nutch的相关配置文件。在nutch-default.xml
这个文件中定义了很多属性,但我们不修改这个文件。我们需要修改的是nutch-site.xml
,该文件中的属性会覆盖默认的属性。一般使用默认的配置就可以满足大部分我们的需求了,但我们必需定义爬虫的名称。以爬取UCL官网为例,在nutch-site.xml
中添加以下内容:
<configuration>
<property>
<name>http.agent.name</name>
<value>My UCL Spider</value>
</property>
</configuration>
然后还要修改的是regex-urlfilter.txt
文件,将最后一行
+.
修改为:
+^http://([a-z0-9]*\.)*ucl.ac.uk/
这部分是使用正则表达式定义要爬取的域名,以上正则表达式将会匹配所有ucl.ac.uk
下的子域名。
最后一步是在Nutch的目录下创建一个名为urls
的目录,并且在这个文件夹中新建一个名为seed.txt
的文本文件。爬虫将从该文件中的网址开始抓取更多的网页。我们添加的网址为http://www.ucl.ac.uk/
。
2 运行爬虫
完成这些修改后我们还需设置环境变量JAVA_HOME
,如果你不清楚Java的安装位置,可以试试以下命令:
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
或者
export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"
接下来运行以下命令就可以启动一个简单的爬虫了,其中urls
是我们定义的seed文件位置;crawl
是爬取到的数据的保存位置;2
是重复进行“产生/抓取/更新”的次数,该值越大则获得的数据便会越多。关于bin/crawl
的更多信息可以查看这里。
bin/crawl urls/ crawl/ 2
此时爬虫应该已经成功启动,你可以看见它的一些输出。
但此时爬取速度并不是很快,这是由于为了不给爬取的网址带来很大的压力,nutch默认在每两个成功请求之间都会等待一段时间,爬取网址的robots文件也可能定义具体的Crawl-Delay值。为了加快爬取的速度,我们可以在nutch-site.xml
中添加如下内容将fetcher.threads.per.queue
属性的值设置为大于1来增加爬虫的线程数。
<property>
<name>fetcher.threads.per.queue</name>
<value>5</value>
<description>This number is the maximum number of threads that
should be allowed to access a queue at one time. Setting it to
a value > 1 will cause the Crawl-Delay value from robots.txt to
be ignored and the value of fetcher.server.min.delay to be used
as a delay between successive requests to the same server instead
of fetcher.server.delay.
</description>
</property>
3 查看爬取到的数据
在爬虫运行一段时间后,我们需要查看爬取到数据的基本信息。可以运行以下命令查看如爬取的url数量等基本信息。
bin/nutch readdb crawl/crawldb/ -stats
也可以用如下命令将爬取到的数据导出为原有的文件格式:
bin/nutch dump -outputDir dump/ -reverseUrlDirs -segment crawl/segments
或者导出为CommonCrawl格式:
bin/nutch commoncrawldump -outputDir commoncrawl -segment crawl/segments -gzip
关于bin/nutch
的更多使用方法可以看这里。
Comments