Nutch抓取流程

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

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中的数据文件进行更新。

 


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5947898.html,如需转载请自行联系原作者

相关文章
|
5月前
|
数据采集 存储 分布式计算
Nutch爬虫在大数据采集中的应用案例
Nutch爬虫在大数据采集中的应用案例
|
5月前
|
数据采集 存储 数据挖掘
Python网络爬虫实战:抓取并分析网页数据
使用Python的`requests`和`BeautifulSoup`,本文演示了一个简单的网络爬虫,抓取天气网站数据并进行分析。步骤包括发送HTTP请求获取HTML,解析HTML提取温度和湿度信息,以及计算平均温度。注意事项涉及遵守robots.txt、控制请求频率及处理动态内容。此基础爬虫展示了数据自动收集和初步分析的基础流程。【6月更文挑战第14天】
377 9
|
6月前
|
数据采集 存储 分布式计算
使用Hadoop和Nutch构建音频爬虫:实现数据收集与分析
使用Hadoop和Nutch构建音频爬虫:实现数据收集与分析
|
Web App开发 API 开发者
深入使用探讨 PuppeteerSharp 抓取 LinkedIn 页面的步骤
深入使用探讨 PuppeteerSharp 抓取 LinkedIn 页面的步骤
|
数据采集 存储 算法
使用Pyspider进行API接口抓取和数据采集
使用Pyspider进行API接口抓取和数据采集
Jmeter 测试结果分析之聚合报告简介
Jmeter 测试结果分析之聚合报告简介
772 0
|
数据采集 Web App开发 存储
Python爬虫系列5-动态抓取网站核心数据-流处理
每个人都需要互相帮助,而我要做的就是把它呈现出来让大家看到。 比如:你背不下来的书,总有人能背下来,你做不出来的题,总有人能做出来,你愿意拖到明天的事,总有人今天努力做完,那么抱歉,你想要的工作也只能别人干了,你想过的人生也只能别人过了! 师者传道授业解惑。传播的力量就是要把这些东西渗透下去,然后才能长出新的叶子。 共勉!
Python爬虫系列5-动态抓取网站核心数据-流处理
|
JSON 前端开发 JavaScript
开源网站流量统计系统Piwik源码分析——参数统计(一)
 Piwik现已改名为Matomo,这是一套国外著名的开源网站统计系统,类似于百度统计、Google Analytics等系统。最大的区别就是可以看到其中的源码,这正合我意。因为我一直对统计的系统很好奇,很想知道里面的运行原理是怎么样的,碰巧了解到有这么一个系统,因此马上尝试了一下。国内关于该系统的相关资料比较匮乏,大多是分享怎么安装的,并没有找到有关源码分析的文章。下面先对其做个初步的分析,后面会越来越详细,本人目前的职位是前端,因此会先分析脚本代码,而后再分析后台代码。
开源网站流量统计系统Piwik源码分析——参数统计(一)
|
缓存 数据库 iOS开发
开源网站流量统计系统Piwik源码分析——后台处理(二)
  在第一篇文章中,重点介绍了脚本需要搜集的数据,而本篇主要介绍的是服务器端如何处理客户端发送过来的请求和参数。
开源网站流量统计系统Piwik源码分析——后台处理(二)
下一篇
无影云桌面