nutch v1.9源码分析(3)——nutch基本爬取流程
来源:互联网 发布:windows 9 编辑:程序博客网 时间:2024/06/11 13:30
1 nutch基本爬取流程
nutch是大名鼎鼎的Doug Cutting发起的爬虫项目,nutch孵化了现在大数据处理事实上的标准Hadoop。在nutch V 0.8.0 版本之前,Hadoop是nutch的一部分,从nutch V0.8.0开始,HDFS和MapReduce从nutch中剥离出成为Hadoop。v0.8.0之后,nutch就完全构建在Hadoop的基础之上了。
既然是爬虫,那么其最核心的工作就是“将网上的资源下载到本地”。nutch采用了MapReduce分布式爬取和解析,具有良好的水平扩展性,此外,nutch还完成了诸如将爬取下来的工作建立lucene索引,建立网络拓扑图(web graph),链接分析等额外的工作。为了支持完成这些工作,nutch采用如下物化的数据结构来保存爬取过程中的数据。
图1 支撑nutch完成爬取的数据结构
本系列分析文章主要关注nutch实现的基本爬虫的功能,即上图中黄框部分,由于图1中省略了injector部分,故用图2表示。
图2 nutch基本爬取流程——业务流
图2是最基本的业务流视角的nutch爬取流程,流程含有inject、generate、fetch、parse、updatedb五个阶段(以下皆称之为“阶段”),一般情况下,inject阶段在整个爬取过程中只会执行一次,而generate、fetch、parse、updatedb四个阶段会组成一个“循环(crawl cycle)”,该循环一般会执行多次,该循环是“死循环”,一般需要外部指定条件(调用方),来终止该循环——这就是为什么nutch的bin/crawl脚本中会指定limit参数(nutch1.8之前叫depth参数,即从指定的种子url开始,爬取指定“深度(次数)”之后终止该循环)。当然,在不指定外部终止条件的情况下,该循环也可能终止,满足的条件是:在指定的最大爬取间隔(默认30天)时间内,所有要爬取的url全部爬取完毕,并且在crawldb中,所有的url的状态要么是“fetch_success”要么是“db_gone”。需要注意的是,如果不指定外部终止条件,如果url对应的html变化时间快于指定的最大爬取时间,该循环永远不会终止。
如图3所示,该“循环”每次从各个阶段共享的crawldb[1]中取出一部分url,开始本轮循环,每轮循环nutch会下载url的html原始文件,通过解析url对应的html内容发现新的url地址(outlinks,外链),并将不断发现的url加入到crawldb中,然后再开始下次循环。
图3 nutch基本爬取流程——业务流+数据流
- nutch v1.9源码分析(3)——nutch基本爬取流程
- nutch v1.9源码分析(1)——分析目标
- nutch v1.9源码分析(4)——injector分析
- nutch v1.9源码分析(5)——generator分析
- nutch v1.9源码分析(6)——plugin系统
- nutch v1.9源码分析(2)——nutch bin和src目录解析及编译
- nutch源码分析---3
- Nutch 1.3 源码分析 5 Fetcher流程
- nutch爬取内容分析和爬取流程命令实现
- Nutch 源码分析
- Nutch 源码分析 (1)
- Nutch 2.3 源码分析
- nutch源码分析---1
- nutch源码分析---2
- nutch源码分析---4
- nutch源码分析---5
- nutch源码分析---6
- nutch源码分析---7
- 社交招聘网络Linkedin的使用体验(HR招聘篇10)
- 通过反射从数据库返回集合ResultSet中得到实体对象的list集合
- [python snippets] 邮件发送 (带附件,多收件人, 支持SMTP 和Postfix )
- 敏捷测试过程的度量标准---请记住,把度量作为一种激励的手段而不是打击士气的方式
- 不是技术牛人,如何拿到国内IT巨头的Offer
- nutch v1.9源码分析(3)——nutch基本爬取流程
- 正则表达式基本语法
- hdu1003 最大连续子序列和
- C语言学习入门 (七) 结构体和枚举
- sobel算子(转)
- 动态规划之最大子段和
- [Perl] Find Shell on your Wordpress site
- ajax跨域请求的解决方案
- emacs 多窗口