• Nutch抓取流程


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

  • 相关阅读:
    【题解】「CF1373B」01 Game
    asdfasd
    android开发DialogFragment禁止按back键消失的解决方法
    MySQL报错1055
    IDEA中使用Git拉取代码时报 Git pull failed原因及处理方法
    数据挖掘导论 完整版+PPT+Python R代码
    MATLAB统计分析与应用 40个案例分析[源代码及数据]
    机器学习实战 中英文版
    电力系统负荷预测数据集【全】含下载链接
    Nginx 导致swagger setCookie sessionid 失效
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/5947898.html
Copyright © 2020-2023  润新知