Nutch工作流程-说明性文档

Nutch工作流程:建立初始URL集合分析

初始URL集的建立有两种方式:超链接和站长提交。

超链接 是指机器人程序根据网页链到其他网页中的超链接,就像日常生活中所说的“一传十,十传百……”一样,从少数几个网页开始,连到数据库上所有到其他网页的链接。理论上,若网页上有适当的超连结,机器人便可以遍历绝大部分网页。

站长提交 是指在实际运行中,爬虫不可能抓取到所有站点,为此,网站站长可以向搜索引擎进行提交,要求收录,搜索引擎经过核查之后,便将该网站加入到URL集合中,进行抓取。

 

Nutch工作流程:inject
inject操作调用的是nutch的核心包之一crawl包中的类org.apache.nutch.crawl.Injector。它执行的结果是:crawldb数据库内容得到更新,包括URL及其状态。
inject操作主要作用可以从下面3方面来说明:
(1) 将URL集合进行格式化和过滤,消除其中的非法URL,并设定URL状态(UNFETCHED),按照一定方法进行初始化分值;
(2) 将URL进行合并,消除重复的URL入口;
(3) 将URL及其状态、分值存入crawldb数据库,与原数据库中重复的则删除旧的,更换新的。
命令:
$ ./bin/nutch inject crawldb urls
参数:
crawldb:输出的crawldb路径
urls:输入的待注入url文件


Nutch工作流程:generate
generate操作调用的是crawl包中的类org.apache.nutch.crawl.Generator。它执行的结果是:创建了抓取列表,存放于segments目录下,以时间为文件夹名称。循环抓取多少次,segments文件夹下就会有多少个以时间为名称的文件夹。
generate操作主要作用可以从下面3方面来说明:
(1) 从crawldb数据库中将URL取出并进行过滤;
(2) 对URL进行排序,通过域名、链接数和一种hash算法综合进行降序排列;
(3) 将排列列表写入segments目录中。
命令:
$ ./bin/nutch generate crawldb segments
参数:
crawldb:输入的crawldb路径
segments:输出的segments目录


Nutch工作流程:fetch
fetch操作调用的是fetcher包中的类org.apache.nutch.fetcher.Fetcher。它执行的结果是:将页面内容抓取下来,存于segment目录下。
fetch操作主要作用可以从下面4方面来说明:
(1) 执行抓取,按照segments目录下的抓取列表进行;
(2) 抓取过程中,页面的URL地址可能因为链接发生改变,从而需要更新URL地址;
(3) 抓取采用多线程方式进行,以提高抓取速度;
(4) fetch操作过程中调用了parse操作。
命令:
$ ./bin/nutch fetch segment
参数:
segment:输入的待抓取的segment目录


Nutch工作流程:parse
parse操作调用的是parse包中的类org.apache.nutch.parse.ParseSegment。它执行的结果是:将fetch得到的页面解析为text和data,存于segments目录下。
parse操作主要作用可以从下面3方面来说明:
(1) 解析segment中由fetch得到的页面,并进行整理,将页面分成为parse-date和parse-text;
(2) parse-date中保存的是页面的题名、作者、日期、链接等内容;
(3) parse-text中保存的是页面的文本内容。
例如,我只执行一次抓取任务,就执行了上述的一些操作,操作的结果直接反映在segments目录中。可以看到在XXX\segments目录下面创建了20130304102407这个目录,该目录中包含6个目录:content、crawl_fetch、crawl_generate、crawl_parse、parse_data、parse_text,从目录名称就可以大致知道该目录存取的相关内容信息。
命令:
$ ./bin/nutch parse segment
参数:
segment:输入的segment目录


Nutch工作流程:updatedb
updatedb操作调用的是crawl包中的类org.apache.nutch.crawl.CrawlDb。它执行的结果是:更新了crawldb数据库,为下一轮抓取做准备。
updatedb操作主要作用如下:
根据segments目录下fetch目录和parse目录中的内容,对crawldb进行更新,增加新的URL,更换旧的URL。
命令:
$ ./bin/nutch updatedb crawldb segments
参数:
crawldb:要更新的crawldb
segment:输入的segment目录


Nutch工作流程:invertlinks操作分析
invertlinks操作用来更新linkDB,为建立索引的工作提供准备。
Nutch工作流程:index过程分析
index过程,即索引过程,包括:将数据转换成文本、分析文本、将分析过的文本保存到数据库中这三个操作。
(1) 转换成文本
在索引数据之前,首先必须将数据转换成nutch 能够处理的格式――纯文本字符流。但是,在现实世界中,信息多以富媒体(rich media)文档格式呈现:PDF、WORD、EXCEL、HTML、XML等。为此,nutch采用了插件机制(plugin),通过各种各样的文档解析器,将富媒体转换成纯文字字符流。文档解析器种类繁多,开发人员可以根据需要进行选择,同时还可以自己修改或编写,非常灵活方便。
(2) 分析文本
在对数据进行索引前,还需要进行预处理,对数据进行分析使之更加适合被索引。分析数据时,先将文本数据切分成一些大块或者语汇单元(tokens),然后对它们执行一些可选的操作,例如:在索引之前将这些语汇单元转换成小写,使得搜索对大小写不敏感;最有代表性的是要从输入中去掉一些使用很频繁但却没有实际意义的词,比如英文文本中的一些停止词(a、an、the、in、on等)。同样的,我们也需要分析输入的语汇单元,以便从词语中去掉一些不必要的字母以找到它们的词干。这一处理过程称为分析(analyze)。分析技术在索引和搜索时都会用到,比较重要。
(3) 将分析过的文本保存到数据库中
对输入的数据分析处理完成之后,就可以将结果写入到索引文件中。Nutch采用的是Lucene的索引格式,可以参考关于Lucene的索引机制。Lucene采用“倒排索引”的数据结果来存储索引的。

 

Nutch工作流程:搜索程序分析

Nutch的搜索程序执行过程,可以从下面的步骤了解:

(1) HTTP服务器接收用户发送过来的请求。对应到nutch的运行代码中就是一个servlet,称为查询处理器(Query Handler)。查询处理器负责响应用户的请求,并将相应的HTML结果页面返回给用户。

(2) 查询处理器对查询语句做一些微小的处理并将搜索的项(terms)转发到一组运行索引搜索器的机器上。Nutch的查询系统似乎比lucene简单的多, 这主要是因为搜索引擎的用户对他自己所要执行的查询内容有非常清晰的思路。然而,lucene的系统结构非常灵活,且提供了多种不同的查询方式。看似简单 的nutch查询最终被转换为特定的lucene查询类型。每个索引搜索器并行工作且返回一组有序的文档ID列表。

(3) 现在存在这大量从查询处理器返回过来的搜索结果数据流。查询处理器对这些结果集进行比较,从所有的结果查找出匹配最好的那些。如果其中任何一个索引搜索器在1~2秒之后返回结果失败,该搜索器的结果将被忽略。因此,最后列表由操作成功的搜索器返回的结果组成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值