【问题标题】:Nutch : get current crawl depth in the pluginNutch : 在插件中获取当前的爬行深度
【发布时间】:2010-08-20 12:34:37
【问题描述】:

我想为 nutch 编写自己的 HTML 解析器插件。 我正在通过生成仅落在特定 xpath 中的外链来进行集中爬行。 在我的用例中,我想根据当前的爬网深度从 html 页面中获取不同的数据。所以我需要知道我正在解析的每个内容的 HtmlParser 插件的当前深度。

Nutch 可以吗?我看到 CrawlDatum 没有 crawl_depth 信息。 我正在考虑在另一个数据结构中使用信息图。 有人有更好的主意吗?

谢谢

【问题讨论】:

    标签: nutch


    【解决方案1】:

    Crawl.java 有 NutchConfiguration 对象。在初始化所有组件时传递此对象。我在创建新的 Fetcher 之前设置了 crawl-depth 属性。

    conf.setInt("crawl.depth", i+1);
    new Fetcher(conf).fetch(segs[0], threads,
              org.apache.nutch.fetcher.Fetcher.isParsing(conf));  // fetch it
    

    HtmlParser 插件可以通过如下方式访问:

    LOG.info("Current depth: " + getConf().getInt("crawl.depth", -1));
    

    这不会强迫我打破 map-reduce。 谢谢 奈恩

    【讨论】:

      【解决方案2】:

      对于 Nutch,“深度”表示连续运行的生成/获取/更新周期数。例如,如果您处于深度 4,则意味着您处于第四个周期。当你说你不想超过深度 10 时,这意味着你想在 10 个循环后停止。

      在每个循环中,在它之前运行的次数或之前的循环(“深度”)是未知的。不保留该信息。

      如果您有自己的 Crawl.java 版本,您可以跟踪当前的“深度”并将该信息传递给您的 HTML 解析器插件。

      【讨论】:

      • 正是我正在做的事情,编写我自己的 Crawl.java 版本。但是深度信息必须通过 ParseSegment.parse 传播,它在 hadoop 集群上执行作业,输入仅作为内容目录。我不想更改 ParseSegment,因为它是 Nutch 内部的。还有什么办法可以解决吗?
      • 我正在考虑在 hdfs 文件中写入此级别信息,并在我的插件级别的每个作业中将其读回,但这在 IO 方面会产生额外的开销。
      • 好的,现在我明白了。我的 html 解析器不是真正的 nutch 插件。它只是在我的 Crawler.java 中调用的一个 java 类,所以我可以将我需要的所有信息传递给它。也许你可以做类似的事情?
      • 这意味着破坏 map-reduce 编程并使整个系统变慢且不可扩展。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多