nutch抓取流程
注入起始url(inject)、生成爬取列表(generate)、爬取(fetch)、解析网页内容(parse)、更新url数据库(updatedb)
1:注入起始url(inject)
org.apache.nutch.crawl.Injector
注入待抓取URL,因为Nutch的抓取程序要抓取网页,肯定需要有一个或者多个入口url。
nutch会按照广度优先策略(一般有广度优先策略和深度优先策略)进行抓取,根据前面指定
的url进行抓取工作。

url存储具体格式为<Text, CrawlDatum>。其中的key表示该URL的地址,而value则是Nutch
自己定义的一个类型“CrawlDatum”,该类型实现了"Writable"接口,用来表示页面的一些
属性。

“CrawlDatum"类所在位置:org.apache.nutch.crawl.CrawlDatum
其中包括了页面的状态,抓取时间,抓取间隔等属性。

inject过程把这些数据存储到crawldb目录中。

2:生成爬取列表(generate)
org.apache.nutch.crawl.Generator
生成segment。这一步骤主要是对上一步提交的URL集合进行分析,确定抓取任务的详细信息。
在segments目录下新建一个System.currentTimeMillis()时间标识的文件,如:20150906145715
另外遍历crawlDb,取出topN个需要fetch的urlList,【topN的配置属性是:generate.topN,
nutch-default.xml中没有配置这个属性,查看代码发现如果没有配置默认是long的最大值
job.getLong(GENERATOR_TOP_N, Long.MAX_VALUE),分析crawl脚本发现这个值会被设置为50000
numSlaves=1
sizeFetchlist=`expr $numSlaves \* 50000`
generate_args=($commonOptions "$CRAWL_PATH"/crawldb "$CRAWL_PATH"/segments -topN $sizeFetchlist -numFetchers $numSlaves -noFilter)

存放到segments/20150906145715/crawl_generate文件中,
crawl_generate 为SequenceFile文件

3:爬取(fetch)
org.apache.nutch.fetcher.Fetcher
分析提交的URL集合之后,将页面内容抓取下来,存于segment目录下。
抓取过程中,页面的URL地址可能因为链接发生改变(302重定向),从而需要更新URL地址;
例如:京东手机分类url:http://list.jd.com/9987-653-655.html,
打开之后url就变成这个了:http://list.jd.com/list.html?cat=9987,653,655
抓取采用多线程方式进行,以提高抓取速度;参数为:fetcher.threads.fetch,默认最大线程数量为10,
使用crawl脚本的话线程数会被设置为50,
【numThreads=50
__bin_nutch fetch $commonOptions -D fetcher.timelimit.mins=$timeLimitFetch "$CRAWL_PATH"/segments/$SEGMENT -noParsing -threads $numThreads

fetch操作过程中调用了parse操作。

4:解析(parse)
org.apache.nutch.parse.ParseSegment
内容解析器。抓取到的页面文件被提交到这里,实现对页面文件的处理,包括页面文件的分析和处理

4.1:parsed text &data
解析segment中由fetch得到的页面,并进行整理,将页面分成为parse-date和parse-text
parse-date中保存的是页面的题名、作者、日期、链接等元数据信息;
parse-text中保存的是页面的文本内容。

通过上面几步操作,创建了如下几个目录
content、crawl_fetch、crawl_generate、crawl_parse、parse_data、parse_text

content
包含下载页面的原始数据,存储为map文件,格式是<url,Content>。为了展示快摘页面,
这里使用文件存储数据,因为Nutch需要对文件做快速随机的访问。

crawl_generate
它包含将要爬取的URL列表以及从CrawlDb取到的与这些URL页相关的当前状态信息,
对应的文件的格式<url,CrawlDatum>。

crawl_fetch
它包含数据爬取的状态信息,即爬取是否成功相应码是什么,等等。
这个数据存储在map文件里,格式是<url,CrawlDatum>

crawl_parse
每个成功爬取并解析的页面的链接列表都保存在这里,页面中解析出来的链接
都保存在这里面也是<url,CrawlDatum>格式存储的。

parse_date
解析过程中收集的元数据,使用<url,ParseData>格式存储的

parse_text
存储的是网址和标题信息,使用<url,ParseText>格式存储的

5:更新url数据库(updatedb)
根据第四步的解析结果更新crawldb数据库
其实这一步就是调用CrawlDb.java中的update方法,从第95和96行代码可以发现
其实就是根据第四步生成的crawl_fetch和crawl_parse中的数据文件进行更新。

Nutch抓取流程的更多相关文章

  1. 【Nutch2.2.1基础教程之6】Nutch2.2.1抓取流程

    一.抓取流程概述 1.nutch抓取流程 当使用crawl命令进行抓取任务时,其基本流程步骤如下: (1)InjectorJob 开始第一个迭代 (2)GeneratorJob (3)FetcherJ ...

  2. 【Nutch2.2.1基础教程之6】Nutch2.2.1抓取流程 分类: H3_NUTCH 2014-08-15 21:39 2530人阅读 评论(1) 收藏

    一.抓取流程概述 1.nutch抓取流程 当使用crawl命令进行抓取任务时,其基本流程步骤如下: (1)InjectorJob 开始第一个迭代 (2)GeneratorJob (3)FetcherJ ...

  3. nutch 抓取需要登录的网页

    题记:一步一坑,且行且珍惜 最近接到任务,要利用nutch去抓取公司内部系统的文章,可是需要登录才能抓到.对于一个做.net,不熟悉java,不知道hadoop,很少接触linux的我,这个过程真是艰 ...

  4. scrapy2——框架简介和抓取流程

    scrapy简介 ​ Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中 scrapy的执行流程 Scrapy主要包括 ...

  5. Nutch学习笔记二——抓取过程简析

    在上篇学习笔记中http://www.cnblogs.com/huligong1234/p/3464371.html 主要记录Nutch安装及简单运行的过程. 笔记中 通过配置抓取地址http://b ...

  6. C# 抓取网站数据

    项目主管说这是项目中的一个亮点(无语...), 类似于爬虫一类的东西,模拟登陆后台系统,获取需要的数据.然后就开始研究这个. 之前有一些数据抓取的经验,抓取流程无非:设置参数->服务端发送请求- ...

  7. casperjs 抓取爱奇艺高清视频

    CasperJS 是一个开源的导航脚本和测试工具,使用 JavaScript 基于 PhantomJS 编写,用于测试 Web 应用功能,Phantom JS是一个服务器端的 JavaScript A ...

  8. 苹果icloud邮箱抓取

    1 icloud登录,与其他网站登录区别  1.1 支持pop抓取的邮箱:pop提供统一接口,抓取简单:  1.2 没有前端js加密的邮箱(139,126,163):只要代码正确模拟登录流程,参数正确 ...

  9. 汽车之家店铺商品详情数据抓取 DotnetSpider实战[二]

    一.迟到的下期预告 自从上一篇文章发布到现在,大约差不多有3个月的样子,其实一直想把这个实战入门系列的教程写完,一个是为了支持DotnetSpider,二个是为了.Net 社区发展献出一份绵薄之力,这 ...

随机推荐

  1. 获取当前操作的IFrame对象的方法

    分两种情况:第一种:获取JS函数在父页面上,如下 function getIframeByElement(element){ var iframe; $("iframe").eac ...

  2. hadoop Hive 的建表 和导入导出及索引视图

       1.hive 的导入导出 1.1 hive的常见数据导入方法 1.1.1 从本地系统中导入数据到hive表 1.创建student表 [ROW FORMAT DELIMITED]关键字,是用来设 ...

  3. Java交流分享(522818473)

    今天来分享哈自己的技术交流群,记得还是刚接触Java建立的群,那时候学习Java很有动力,经常和群友谈论问题,现在都专注公司业务和技术这一块,很多后端框架都没用除了restful,其他都是封装的,不过 ...

  4. 10-padding(内边距)

    padding padding:就是内边距的意思,它是边框到内容之间的距离 另外padding的区域是有背景颜色的.并且背景颜色和内容的颜色一样.也就是说background-color这个属性将填充 ...

  5. Linux入门(9)——Ubuntu16.04安装flash player

    打开网页经常提示安装flash player,不安装flash player很多网页的视频都看不了. Ubuntu16.04安装flash player 打开终端,输入: sudo apt-get i ...

  6. (最大上升子序列)Monkey and Banana -- hdu -- 1069

    http://acm.hdu.edu.cn/showproblem.php?pid=1069      Monkey and Banana Time Limit:1000MS     Memory L ...

  7. Greys--JVM异常诊断工具

    https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pdf 一.简介 我们平时在线上或者开发中会遇到各种性能.功能等问题,在运行过程中 ...

  8. UIKit-UIBezierPath

    UIBezierPath精讲 http://www.henishuo.com/uibezierpath-draw/ iOS UIBezierPath类 介绍 http://justsee.iteye. ...

  9. AngularJS 路由 resolve属性

    当路由切换的时候,被路由的页面中的元素(标签)就会立马显示出来,同时,数据会被准备好并呈现出来.但是注意,数据和元素并不是同步的,在没有任何设置的情况下,AngularJS默认先呈现出元素,而后再呈现 ...

  10. ssh连接超慢解决

    手头有台Linux服务器ssh登录时超级慢,需要几十秒.其它服务器均没有这个问题.平时登录操作都默默忍了.今天终于忍不住想搞清楚到底什么原因.搜索了一下发现了很多关于ssh登录慢的资料,于是自己也学着 ...