(五)——分步抓取

最后更新于:2022-04-01 02:00:23

如果要深入学习Nutch爬虫技术,仅仅会使用crawl命令是不够的,还需要对抓取的过程非常熟悉。本篇文章讲解分布抓取的详细步骤,这里需要用到上一教程中seed.txt所保存的URL信息,还需删除data/crawldb,data/linkdb和data/segments文件夹下的内容,因为我们要分步重新抓取数据。 上一教程[Nutch 1.10入门教程(四)——crawl命令](http://www.sanesee.com/article/step-by-step-nutch-crawl "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安装与配置](http://www.sanesee.com/article/step-by-step-nutch-solr-settings "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进行搜索了
';