高性能爬虫Nutch入门

Nutch是使用Java编写的高性能网络爬虫,常常和其他工具一起来创建搜索引擎。需要注意的是在开始使用Nutch之前,你必须已经安装好Java了。紧接着前往Nutch的页面下载Nutch 1.x。有srcbin两种版本可供下载,为了省去编译带来的麻烦,我们选择下载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的更多使用方法可以看这里


在手机上阅读或分享本文请扫描以下二维码:
By @Zhengyi Yang in
Tags : #java, #crawler,

Comments

评论功能已关闭。