`
twtbgn
  • 浏览: 45195 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一起读nutch源码一 -- crawl

 
阅读更多

crawl:one-step crawler for intranets  一站式的爬取。 也就是将 inject,generate,fetch,parse,updatedb这些都合并到这一个操作中完成。那就从crawl开始研究吧。

crawl类在 org.apache.nutch.crawl.Crawl

先看main方法:

  public static void main(String args[]) throws Exception {
   //读取配置文件,包括nutch-default.xml,nutch-site.xml  
   Configuration conf = NutchConfiguration.create();
   //对hadoop的一些配置设置,及解析用户输入放入数组中
    int res = ToolRunner.run(conf, new Crawl(), args);
    System.exit(res);
  }

 接着会执行run方法:

 

//抓取的数据存放的默认的根目录
    Path dir = new Path("crawl-" + getDate());
    //fetch抓取的时候执行的线程数,默认值为10
    int threads = getConf().getInt("fetcher.threads.fetch", 10);

//mapred任务
    JobConf job = new NutchJob(getConf());

//注入url到crawldb的对象
    Injector injector = new Injector(getConf());
    //生成抓取列表的对象
    Generator generator = new Generator(getConf());
    //抓取网页的对象
    Fetcher fetcher = new Fetcher(getConf());
    //解析抓取内容
    ParseSegment parseSegment = new ParseSegment(getConf());
    //抓取url相关信息存放的地方
    CrawlDb crawlDbTool = new CrawlDb(getConf());
    LinkDb linkDbTool = new LinkDb(getConf());
      
    // initialize crawlDb
    //将rootUrlDir下的url信息注入crawlDb中,只需要最初的时候执行一次即可
    injector.inject(crawlDb, rootUrlDir);
    int i;
    //抓取depth次
    for (i = 0; i < depth; i++) {             // generate new segment
      //生成抓取列表,每次抓取为一个文件夹,以当前时间为文件名
      Path[] segs = generator.generate(crawlDb, segments, -1, topN, System
          .currentTimeMillis());
      if (segs == null) {
        LOG.info("Stopping at depth=" + i + " - no more URLs to fetch.");
        break;
      }
      //根据生成的抓取列表,对网页抓取
      fetcher.fetch(segs[0], threads);  // fetch it

 /*
       * 这里根据nutch-default.xml中的 fetcher.parse属性做判断,默认为false。
       * false:表示在fetcher的阶段不对网页内容做解析,而是分开步骤在fetch完成后专门解析;
       * true:表示在fetcher阶段就对网页内容做解析。
       */
      if (!Fetcher.isParsing(job)) {
     //解析抓取的网页  
        parseSegment.parse(segs[0]);    // parse it, if needed
      }
      //更加解析后数据更新crawldb
      crawlDbTool.update(crawlDb, segs, true, true); // update crawldb
    }
    if (i > 0) {
      //链接反转 
      linkDbTool.invert(linkDb, segments, true, true, false); // invert links
      //如果有solr,对解析的页面生成索引等
      if (solrUrl != null) {
        // index, dedup & merge
        FileStatus[] fstats = fs.listStatus(segments, HadoopFSUtil.getPassDirectoriesFilter(fs));
        SolrIndexer indexer = new SolrIndexer(getConf());

可以看到,crawl就是将各个步骤整合在一个类中执行了,所以后面需要对每个具体的操作来进行分析。

 

分享到:
评论

相关推荐

    apache-nutch-1.3-src.tar.gz_nutch_nutch-1.3.tar.gz

    Apache Nutch 是一个...总结来说,Apache Nutch 1.3 是一个强大的网络爬虫框架,其源码包为开发者提供了深入理解爬虫技术的宝贵资源。无论是用于学术研究还是实际项目开发,Nutch 1.3 都是值得学习和探索的优秀工具。

    apache-nutch-1.6-src.tar.gz

    主要的源代码文件位于`src/java`目录下,按照包结构组织,例如`org.apache.nutch.crawl`、`org.apache.nutch.indexer`和`org.apache.nutch.parse`等。 2. **配置文件**:在`conf`目录下,有默认的Nutch配置文件,如...

    apache-nutch-2.3-src.zip

    Apache Nutch是一个开源的Web爬虫项目,用于抓取互联网上的网页并建立索引,是大数据和搜索引擎领域的重要工具。Nutch 2.3版本是其历史中的一个重要里程碑,提供了许多改进和优化,使得它在大规模数据处理和分布式...

    nutch2.2.1-src

    通过学习和研究Nutch源码,开发者不仅可以了解网络爬虫的工作流程,还可以学习到分布式计算、文本处理、搜索算法等多方面的知识。这对于构建自己的搜索引擎系统,或者在大数据领域进行深度开发有着极大的帮助。同时...

    apache-nutch-1.16.rar 已编译好的版本,可以直接导入eclipse、idea

    例如,`bin/nutch crawl urls -dir crawl -depth 2 -topN 10`会启动一个深度为2的爬取,并返回前10个结果。 5. **调试和扩展**:利用IDE的调试功能,你可以对Nutch的代码进行逐行分析,理解其工作原理,或者在需要...

    nutch crawl代码解析

    接着,`conf.addDefaultResource("crawl-tool.xml")` 加载了 Nutch 的特定配置文件 `crawl-tool.xml`,这个文件定义了 Nutch 抓取工具的特定设置。 然后,`NutchJob(conf)` 被用来创建一个 `JobConf` 对象,这是 ...

    Nutch 1.2源码阅读

    具体而言,会加载`nutch-default.xml`、`crawl-tool.xml`(可选)和`nutch-site.xml`这三个配置文件,分别代表默认配置、爬虫特有配置和用户自定义配置。这些配置文件对Nutch的行为和性能具有决定性的影响。 #### ...

    myeclipse8.5导入nutch1.2源码

    - 编辑 `conf/crawl-urlfilter.txt` 文件,去掉对所有 URL 的限制,如注释掉 `(+^http://([a-z0-9]*\.)*MY.DOMAIN.NAME/)` 这一行。 - 修改 `nutch-site.xml` 文件,在 `&lt;configuration&gt;` 标签内添加以下属性: -...

    Eclipse中编译Nutch-0.9

    - **下载Nutch源码**:访问Apache官方网站或其镜像站点,下载Nutch-0.9源码并解压缩至本地目录。 - **创建Java Project**:在Eclipse中创建一个新的Java Project,命名为"Nutch",并选择“Create project from ...

    nutch的源码解读和nutch入门

    Nutch 是一个开源的全文搜索引擎项目,它基于 Lucene 构建,旨在...总的来说,Nutch 是一个强大的、可扩展的搜索引擎平台,通过深入学习其源码,可以理解搜索引擎的基本工作原理,以及如何构建分布式爬虫和索引系统。

    Nutch2.3.1 环境搭建

    **二、获取Nutch源码** 1. 访问Apache Nutch官方网站(http://nutch.apache.org/releases.html),下载Nutch 2.3.1的源码包。 2. 解压下载的源代码到你选择的工作目录,例如`/usr/local/src/nutch-2.3.1`。 **三、...

    Lucene nutch 搜索引擎 开发 实例 源码

    特别地,Nutch中的Crawl和Fetch阶段展示了如何管理URL队列,以及如何决定何时重新抓取网页。 在学习Lucene和Nutch的源码时,你会遇到以下几个关键概念: 1. **分词**:Lucene使用Analyzer对输入文本进行分词,不同...

    nutch帮助文档;nutch学习 入门

    Nutch是Apache软件基金会开发的一款开源搜索引擎项目,主要用于抓取、索引和搜索Web内容。作为初学者,了解和掌握Nutch的相关知识是探索搜索引擎技术的第一步。本篇将深入探讨Nutch的基本概念、功能、架构以及如何...

    Windows下配置nutch

    - 修改配置文件,如 `nutch-site.xml` 和 `crawl-urlfilter.txt`,以适应你的需求。 - **借助 Cygwin 使用 Nutch**: - 安装 Cygwin,这是一个模拟 Linux 环境的工具,使得可以在 Windows 上运行 Linux 命令行...

    nutch1.2源码

    要使用Nutch 1.2,你需要先安装Hadoop环境,然后编译Nutch源码,配置相应的参数,设置爬取种子,启动爬虫,最后进行索引和搜索。这个过程涉及的文件包括`conf`目录下的配置文件,如`nutch-site.xml`,以及`bin`目录...

    eclipse配置nutch,eclipse配置nutch

    选择“Run As &gt; Java Application”,并在“Arguments”选项卡中设置程序参数,如`Program arguments: urls-dir crawl-depth 3 topN 50`,以及虚拟机参数`VM arguments: -Dhadoop.log.dir=logs -Dhadoop.log.file=...

    windows下的nutch配置总结

    - 打开命令行,导航到Nutch源码目录,运行`mvn clean install -DskipTests`命令,这将编译Nutch并创建可执行的JAR文件。 4. **配置Nutch**: - 修改`conf/nutch-site.xml`文件,设置抓取策略、存储路径、抓取间隔...

    Nutch中文教程nutcher.zip

    nutcher 是 Apache Nutch 的中文教程,在... Nutch流程控制源码详解(bin/crawl中文注释版) Nutch教程——URLNormalizer源码详解 Nutch参数配置——http.content.limit 文档截图:

    Windows下cygwin+MyEclipse 8.5+Nutch1.2+Tomcat 6.0

    - 修改`crawl-urlfilter.txt`文件中的正则表达式,以便爬取特定网站。 - 在项目根目录下创建`urls`文件夹,并在其中创建`url.txt`文件,包含要爬取的URL。 - 最后,配置Java项目的运行参数,并通过MyEclipse的...

    nutch入门实例教程.pdf

    - **执行抓取命令**: 使用 `bin/nutch crawl` 命令开始抓取。 - **测试结果**: 检查抓取的数据是否符合预期。 - **Intranet Recrawl**: 对已抓取的内部网进行周期性的重新抓取。 - **爬行全网**: - **数据集...

Global site tag (gtag.js) - Google Analytics