`

抓取流程-fetcher

 
阅读更多

这个过程很简单,就是开启了一个maprunnable来实现自定义的输出(没有使用通常的mapper).red也是使用默认的.

过程是:




 

一。Fetch初始化

由于它实现了MapRunnable,那么它其实是一个mapper的启动器,包括将多个输入Key-value pairs处理,然后输出的过程完全由其中的run()实现了,所以发现job中并没有定义mapper;而reduce也是使用了默认的。

 

输入

segment:由上一过程generator的输出生成,形如segments/201106xxxxxx的格式;

threads:将由多少个fetcher threads来运行这批fetchlist。

InputFormat(sequence file):由于使用了自定义的input format,而其中的getSplits()正是按照fileStatus来对应生成的,所以有多少个file就有多少个splits,这意味着在generate时的rednum就是现在的mapnum了。

input path:segname/crawl_generate

output path:segname

output format:FetchOutputFormat,<text,NutchWritable>,有三种:

<url,crawldatum> --》crawl_fetch

<url,content>  --> content

<url,parse> --> crawl_parse,parse_data,parse_text

其中nutchwritable是对其中的value的包装.除了了crawl_parse是sequence file,其它四个都是 map file

 

处理-MapRunnable

在抓取过程当前处理的urls是固定的,大小以threads * 50=total size来计算。数据结构是:

  若干个queues,数量由当前的fetchlsit中的hosts决定;即queue与host是1:1

每个queue中items数量是不固定的,当然会受到total szie的结束。同时作者使用了巧妙的方法来记录当前正在fetching的urls set,当这个set中大于1时表明此host正由多个threads来处理其中的urls,所以用到了maxThreads来断言:

  如果>maxThreads时返回 null,表明已经达到并行fetch的上限,让调用者等待。

 

fetch过程

1.以不固定的顺序从所有queues中(由FetcherQueues管理),返回其中的item元素来fetch;

 

2.分析此url所在的robts.txt。为了提供灵活的timeover控制及其它request headers,直接使用了socket处理。

3.处理限制性问题,如要不受限或时间间隔在此delay之外则继续;

4.开始真正的fetch。当然用到了parse plugins。由于没有使用mapper(注意不是Maptask)所以需要自己处理输出相关結果。 当有新urls添加到queue中?updatedb 中可以看出,是不会添加进去fetch的,只会添加crawl_parse中等待下一回的fetch.

(由output()中也可以看出,当使用parsing参数并当status == STATUS_FETCH_SUCCESS时进行了一个parseutil.parse()操作,得到了个页面中的所有outlinks等数据,最后在ParseOutptuFormat#write中进行了一个iterator输出所有outlinks到crawl_parse中。)

 

5.对queue中的urls进行2,3,4步骤的循环处理。

 

 

 

---各文件内容---

content:

http://www.163.com/    Version: -1
url: http://www.163.com/
base: http://www.163.com/
contentType: text/html
metadata: X-Via=1.1 stcz187:8102 (Cdn Cache Server V2.0), 1.1 dg112:8080 (Cdn Cache Server V2.0) Vary=Accept Date=Sat, 09 Jul 2011 07:14:02 GMT Expires=Sat, 09 Jul 2011 07:15:22 GMT nutch.crawl.score=1.0 Content-Encoding=gzip _fst_=33 nutch.segment.name=20110706142546 Connection=close Content-Type=text/html; charset=GBK Server=nginx Cache-Control=max-age=80
Content:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
.

.

.

<dt class="txt_black"><cite class="txt_blue txt_12"><a href="http://blog.csdn.net/cheny_com
        " onclick='LogClickCount(this,79);' target="_blank">cheny_com</a></cite><a href="http://blog.csdn.net/cheny_com/article/details/6587277" target="_blank" title="敏捷开发“松结对编程”实践之三:共同估算篇" onclick='LogClickCount(this,79);'>敏捷开发“松结对编程”实践之三:共同估算篇</a></dt>
                                                                     
                       <dt class="txt_black"><cite class="txt_blue txt_12"><a href="
http://blog.csdn.net/turingbooks
        " onclick='LogClickCount(this,79);' t

 

从上可以看出,content是存放了所有fetch的html raw contents。

 

 

crawl_fetch:

http://www.163.com/    Version: 7
Status: 33 (fetch_success)
Fetch time: Sat Jul 09 15:14:02 CST 2011
Modified time: Thu Jan 01 08:00:00 CST 1970
Retries since fetch: 0
Retry interval: 2592000 seconds (30 days)
Score: 1.0
Signature: null
Metadata: _ngt_: 1309933252318_pst_: success(1), lastModified=0

http://www.csdn.net/    Version: 7
Status: 33 (fetch_success)
Fetch time: Sat Jul 09 15:14:02 CST 2011
Modified time: Thu Jan 01 08:00:00 CST 1970
Retries since fetch: 0
Retry interval: 2592000 seconds (30 days)
Score: 1.0
Signature: null
Metadata: _ngt_: 1309933252318_pst_: success(1), lastModified=0

 

通过下面的crawl_geneate的比较可以看出,这个阶段的結果是对原generate的修改,包括fetch time,status,metadata etc.

 

 

crawl_parse :(note this is a seqnence file but map files in other files)

http://www.163.com/    Version: 7
Status: 65 (signature)
Fetch time: Sat Jul 09 15:14:08 CST 2011
Modified time: Thu Jan 01 08:00:00 CST 1970
Retries since fetch: 0
Retry interval: 0 seconds (0 days)
Score: 1.0
Signature: 989844cdb45e225db2b2731315cb5342
Metadata:

http://img3.cache.netease.com/cnews/js/ntes_jslib_1.x.js    Version: 7
Status: 67 (linked)
Fetch time: Sat Jul 09 15:14:08 CST 2011
Modified time: Thu Jan 01 08:00:00 CST 1970
Retries since fetch: 0
Retry interval: 2592000 seconds (30 days)
Score: 0.01
Signature: null
Metadata:
.

.

.

http://g.csdn.net/5187332    Version: 7
Status: 67 (linked)
Fetch time: Sat Jul 09 15:14:08 CST 2011
Modified time: Thu Jan 01 08:00:00 CST 1970
Retries since fetch: 0
Retry interval: 2592000 seconds (30 days)
Score: 0.01
Signature: null
Metadata:

http://g.csdn.net/5189759    Version: 7
Status: 67 (linked)
Fetch time: Sat Jul 09 15:14:08 CST 2011
Modified time: Thu Jan 01 08:00:00 CST 1970
Retries since fetch: 0
Retry interval: 2592000 seconds (30 days)
Score: 0.01
Signature: null
Metadata:
这里其实就是包括seed urls在内的所有parse的urls状态 信息

 

 

parse_data:

http://www.163.com/    Version: 5
Status: success(1,0)
Title: 网易
Outlinks: 100
  outlink: toUrl: http://img3.cache.netease.com/cnews/js/ntes_jslib_1.x.js anchor:
  outlink: toUrl: http://reg.vip.126.com/enterMail.m anchor: 进入我的邮箱
。。。

Content Metadata: X-Via=1.1 stcz187:8102 (Cdn Cache Server V2.0), 1.1 dg112:8080 (Cdn Cache Server V2.0) Expires=Sat, 09 Jul 2011 07:15:22 GMT _fst_=33 nutch.segment.name=20110706142546 Connection=close Server=nginx _ftk_=1310195642769 Cache-Control=max-age=80 nutch.content.digest=989844cdb45e225db2b2731315cb5342 Date=Sat, 09 Jul 2011 07:14:02 GMT Vary=Accept Content-Encoding=gzip nutch.crawl.score=1.0 Content-Type=text/html; charset=GBK
Parse Metadata: CharEncodingForConversion=gb18030 OriginalCharEncoding=gb18030

.

.

.

http://www.csdn.net/    Version: 5
Status: success(1,0)
Title: CSDN.NET - 全球最大中文IT社区,为IT专业技术人员提供最全面的信息传播和服务平台
Outlinks: 100
  outlink: toUrl: http://www.csdn.net/1341df/csdn_ggmm.js anchor:
  outlink: toUrl: http://counter.csdn.net/a/js/AreaCounter.js anchor:
。。。

Content Metadata: ETag=W/"e7bf7935f53dcc1:1111" Content-Length=126983 X-UA-Compatible=IE=EmulateIE7 Last-Modified=Sat, 09 Jul 2011 05:01:06 GMT _fst_=33 nutch.segment.name=20110706142546 Connection=close X-Powered-By=ASP.NET Server=nginx/0.7.68 Cache-Control=max-age=1800 _ftk_=1310195642771 nutch.content.digest=892e028e36c036049789babb3db5806b Date=Sat, 09 Jul 2011 07:14:02 GMT Vary=Accept-Encoding nutch.crawl.score=1.0 Content-Location=http://www.csdn.net/index.htm Content-Type=text/html; charset=utf-8 Accept-Ranges=bytes
Parse Metadata: CharEncodingForConversion=utf-8 OriginalCharEncoding=utf-8

 

这里就是各个seed urls中取出的所有出站urls,在搜索时的anchor项就是由这里提供的。

 

 

parse_text:

http://www.163.com/    网易 帐号 密码 选择去向 网易通行证 163邮箱 126邮箱 VIP126邮箱 Yeah邮箱 188财富邮 vip邮箱 网易博客 网易相册 同城约会 网易论坛 网易微博 登录微博 注册免费邮箱 欢迎你, pInfo 进入通行证 进入我的邮箱 进入我的邮箱 进入我的邮箱 进入我的邮箱 进入我的邮箱 进入我的邮箱 进入我的博客 进入我的相册 进入。。。

http://www.csdn.net/    CSDN.NET - 全球最大中文IT社区,为IT专业技术人员提供最全面的信息传播和服务平台 CSDN.NET - 中国领先的IT技术社区,为IT专业技术人员提供最全面的信息传播和服务平台 您还未登录! | 登录 | 注册 | 帮助 首页 资讯 论坛 博客 下载 搜索 空间 网摘 程序员 会议 CTO 俱乐部 项目交易 TUP 培训充电 学生大本营 移。。。

 

这里的内容是从整个page中所有tags解析的contents

 

 

----之前generator阶段的結果,

crawl_generate:

http://www.163.com/    Version: 7
Status: 1 (db_unfetched)
Fetch time: Mon Jul 04 14:57:19 CST 2011
Modified time: Thu Jan 01 08:00:00 CST 1970
Retries since fetch: 0
Retry interval: 2592000 seconds (30 days)
Score: 1.0
Signature: null
Metadata: _ngt_: 1309933252318


http://www.csdn.net/    Version: 7
Status: 1 (db_unfetched)
Fetch time: Mon Jul 04 14:57:19 CST 2011
Modified time: Thu Jan 01 08:00:00 CST 1970
Retries since fetch: 0
Retry interval: 2592000 seconds (30 days)
Score: 1.0
Signature: null
Metadata: _ngt_: 1309933252318


anyway ,这些数据都可以从code中了解,但显示出来是为了方便日后 的查找而已;

另外可以根据输出格式的来想像相关的数据亦可。

 

 

  • 大小: 44.2 KB
分享到:
评论

相关推荐

    mqtt-feed-fetcher:一个 RSS 提要获取器,将新项目通过管道传输到 MQTT 主题

    - **自动化工作流**:将新项目触发自动化工作流程,如自动抓取并保存文章全文。 **使用步骤** 1. 安装 `mqtt-feed-fetcher` 及其依赖,如 `paho-mqtt`(用于 MQTT 交互)和 `feedparser`(用于解析 RSS/Atom 提要)...

    shop-titans-spreadsheet-fetcher:从Shop Titans电子表格中获取数据

    4. **数据解析**:抓取的数据可能包含游戏特有的编码或格式,"Shop Titans Spreadsheet Fetcher"会对这些数据进行解析,转换成易于理解的格式。 5. **结果展示与分析**:工具通常会提供一个直观的界面,展示提取的...

    Nutch爬虫工作流程及文件格式详细分析.doc

    Nutch 是一个开源的搜索引擎项目,其核心功能包括网络爬虫(Crawler)和搜索器(Searcher)。本文主要分析Nutch爬虫的工作流程及其涉及的...了解Nutch的文件格式和工作流程对于管理和优化大规模的Web抓取任务至关重要。

    分析Nutch的工作流程

    Nutch的工作流程主要包括以下几个步骤:构建初始URL集合、注入(Inject)、生成抓取列表(Generate)、抓取页面(Fetch)、解析页面(Parse)、更新索引(Index)。接下来我们将详细地探讨每个步骤的具体实现。 ###...

    搜索引擎系统中网页抓取模块研究

    处理器链包括PreProcessor、Fetcher、Extractor、Writer和PostProcessor五个队列,分别处理抓取的先决条件、网络传输协议、内容解析、信息写入和后期处理。 总结来说,搜索引擎系统中的网页抓取模块是关键,它决定...

    nutch1.5-官方包

    - **Web 抓取(Fetcher)**:Nutch 使用多线程进行网页抓取,遵循Robots协议,确保合法抓取。 - **链接分析(Link Analysis)**:Nutch 运用PageRank算法对网页的重要性进行评估,提高搜索结果的相关性。 - **...

    Nutch爬虫工作流程及文件格式详细分析

    然后,Fetcher下载线程按照Fetchlist抓取网页。抓取完成后,Crawler会更新WebDB,并生成新的Fetchlist,包含未抓取或新发现的URL,进入下一轮循环。在抓取过程中,Nutch遵循Robots Exclusion Protocol,尊重网站的...

    页面提取器

    在"page-fetcher-master"这个文件名中,"master"通常指的是Git仓库的主分支,这暗示了该项目可能是一个开源软件,其源代码被版本控制并托管在某个Git服务上,比如GitHub。用户可以克隆或下载这个"page-fetcher"项目...

    nutch crawl代码解析

    本文将解析 Nutch-0.9 版本中的 `Crawl` 类,它是 Nutch 抓取流程的起点。 `Crawl` 类位于 `org.apache.nutch.crawl` 包中,它包含了启动 Nutch 抓取程序的主要逻辑。`main` 函数是整个程序的入口点,它接收命令行...

    nutch流程解析.doc

    Nutch 的工作流程主要包括六个主要步骤:Injector、Generator、Fetcher、ParseSegment、CrawlDb 更新和 LinkDb 更新,最后由 Indexer 创建索引。下面将对每个步骤进行详细解释。 1. Injector: Injector 是 Nutch ...

    apache-nutch-1.4-bin.tar.gz

    4. **运行Nutch**:使用bin/nutch命令行工具执行`inject`、`fetch`、`parse`、`update`和`index`等步骤,完成网页抓取和索引的完整流程。 5. **设置Solr或HBase**:为了进行搜索,你需要配置并运行Solr或HBase来接收...

    Nutch 1.2源码阅读

    当执行`crawlurls–dirmydir–depth5–threads5–topN100`命令时,Nutch的抓取流程便由此类启动。其中,`mydir`指定数据存储路径,包括crawlDb、segments和indexes等关键目录。 在Crawl类的`main()`方法中,首先...

    nutch帮助文档;nutch学习 入门

    - **Fetcher**:下载抓取到的网页。 - **Parser**:解析HTML,提取内容和元数据。 - **Indexer**:将解析后的数据构建为索引。 - **Searcher**:提供搜索服务,查询索引并返回结果。 4. **入门学习Nutch** - *...

    nutch架构图

    "Fetcher.png"展示了Fetcher组件的详细工作流程。Fetcher负责网络通信,下载网页,并将其存储为Segment,这是Nutch的基本处理单元。 "Parse segment.png"可能涉及Parse阶段,Segment被送入Parser进行处理,提取出...

    apach-nutch-1.9-bin.tar.gz

    同时,可能还需要配置`conf/regex-urlfilter.txt`和`conf/fetcher.properties`等文件以适应特定需求。 5. **运行Nutch**:启动Nutch涉及到多个步骤,包括生成URL列表、执行抓取、索引和搜索等。命令行工具如`bin/...

    apache-nutch-2.1

    7. **爬虫工作流程**: - **种子 URL 设置**:开始时,用户提供一组种子 URL。 - **发现**:Fetcher 下载 URL,并将其内容传递给 Parser。 - **解析**:Parser 解析 HTML,提取内容和链接。 - **分析**:...

    Nutch源码研究

    此外,`Fetcher`还负责监控抓取队列,确保任务的顺利进行,并处理任何可能出现的异常。 Nutch 的工作流程可以总结为以下几个步骤: 1. **初始化**:根据配置文件启动`Fetcher`,创建指定数量的`FetcherThread`线程...

    Python爬虫项目集合-pyspider-project.zip

    然后,通过调度器启动任务,fetcher将抓取网页,processor解析出所需数据,最后由result_worker存储结果。 五、进阶应用 pyspider不仅适合初学者,也为高级用户提供了丰富的扩展接口。例如,可以自定义中间件来处理...

    Crawler4j-3.5 源码 类包 依赖包

    Crawler4j的使用流程:** - 创建自定义的WebCrawler类,实现`visit(Page)`方法来处理每个抓取到的页面。 - 配置CrawlerConfig对象,设置爬虫参数。 - 创建Controller实例,启动爬虫,传入配置好的WebCrawler和...

    搜索引擎nutch配置

    如`bin/nutch inject`来注入种子URL,`bin/nutch fetch`执行抓取,`bin/nutch update`更新已抓取的页面,`bin/nutch generate`生成待抓取的URL列表,以及`bin/nutch crawl`执行整个流程。 8. **索引与搜索** 抓取...

Global site tag (gtag.js) - Google Analytics