(五)—Nutch分步抓取

2018-07-31 14:18 更新

如果要深入学习Nutch爬虫技术,仅仅会使用crawl命令是不够的,还需要对抓取的过程非常熟悉。本篇文章讲解分布抓取的详细步骤,这里需要用到上一教程中seed.txt所保存的URL信息,还需删除data/crawldb,data/linkdb和data/segments文件夹下的内容,因为我们要分步重新抓取数据。

上一教程Nutch 1.10入门教程(四)——crawl命令这篇文章讲解了一站式抓取命令crawl的用法,然而,实际的抓取过程包含多个命令的,为了简化操作,crawl把多个命令组合到一起提供给用户使用的。如果要深入学习Nutch爬虫技术,仅仅会使用crawl命令是不够的,还需要对抓取的过程非常熟悉。本篇文章讲解分布抓取的详细步骤,这里需要用到上一教程中seed.txt所保存的URL信息,还需删除data/crawldb,data/linkdb和data/segments文件夹下的内容,因为我们要分步重新抓取数据。

1 Nutch数据文件夹组成

执行crawl命令之后,会在Nutch的runtime/local下面生成一个TestCrawl文件夹,里面包含三个文件夹:crawldb、linkdb和segments。

crawldb:它包含Nutch所发现的所有URL,它包含了URL是否被抓取、何时被抓取的信息。

linkdb:它包含了Nutch所发现的crawldb中的URL所对应的全部链接,以及源URL和锚文本。

segments:里面包含多个以时间命名的segment文件夹,每个segment就是一个抓取单元,包含一系列的URL,每个segment又包含如下文件夹:

crawl_generate:待抓取的URL
crawl_fetch:每个URL的抓取状态
content:从每个URL抓取到的原始内容
parse_text:从每个URL解析得到的文本
parse_data:从每个URL解析得到的外链和元数据
crawl_parse:包含外链URL,用来更新crawldb

2 将URL列表注入到crawldb中

bin/nutch inject data/crawldb urls

3 抓取

3.1 生成抓取列表

为了抓取指定URL的页面,我们需要先从数据库(crawldb)里生成一个抓取列表:

bin/nutch generate data/crawldb data/segments

generate命令执行之后,会生成一个待抓取页面的列表,抓取列表存放在一个新建的segment路径中。segment的文件夹根据创建的时间进行命名(本教程文件夹名为201507151245)。

generate还有很多可选参数,读者可以通过以下命令自行查看(其它命令的查看方法也一样):

bin/nutch generate

3.2 开始抓取

根据generate生成的抓取列表抓取网页:

bin/nutch fetch data/segments/201507151245  #这里的201507151245为文件夹名,需要根据自己的情况进行更改,或者直接采用data/segments文件夹,这样的操作对segments文件夹下的所有子文件夹生效,后文同理。

3.3 解析

bin/nutch parse data/segments/201507151245

3.4 更新数据库

根据抓取的结果更新数据库:

bin/nutch updated data/crawldb –dir data/segments/201507151245

现在,数据库里包含所有初始页面更新后的入口,以及从初始集合中新发现的页面的新入口。

3.5 反转链接

在建立索引之前,我们首先对所有的链接进行反转,这样我们才可以对页面的来源锚文本进行索引。

bin/nutch invertlinks data/linkdb –dir data/segments/201507151245

3.6 将抓取到的数据加入Solr索引

如果还没有安装Apache Solr,请参考Nutch 1.10入门教程(三)——Solr安装与配置安装好Solr服务器,并启动。

现在,我们对抓取到的资源建立索引:

bin/nutch index data/crawldb -linkdb data/linkdb -params solr.server.url=http://192.168.1.11:8983/solr -dir data/segments/201507151245

3.7 去除重复URL

一旦建立了全文索引,它必须处理重复的URL,使得URL是唯一的:

bin/nutch dedup

这个命令基于签名查找重复的URL,对重复的URL标记为STATUS_DB_DUPLICATE,Cleaning和Indexing任务将会根据标记删除它们。

3.8 清理

bin/nutch clean –D solr.server.url=http://192.168.1.11:8983/solr data/crawldb

从solr移除HTTP301、404以及重复的文档。

到此为止,我们使用分步抓取的方式完成了所有抓取步骤,正常抓取的情况下,可以在http://192.168.1.11:8983/solr进行搜索了

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号