【发布时间】:2018-03-12 07:15:53
【问题描述】:
我已经配置了 Nutch 2.3.1 来抓取一些新闻网站。由于网站主页会在一天后发生变化,所以我想以某种不同的方式处理主页,以便主页只抓取主要类别而不是文本,因为文本会在一段时间后发生变化(我在 Google 中观察到类似的事情) . 对于其余页面,它的工作正常(抓取文本等)
【问题讨论】:
标签: apache web-crawler nutch
我已经配置了 Nutch 2.3.1 来抓取一些新闻网站。由于网站主页会在一天后发生变化,所以我想以某种不同的方式处理主页,以便主页只抓取主要类别而不是文本,因为文本会在一段时间后发生变化(我在 Google 中观察到类似的事情) . 对于其余页面,它的工作正常(抓取文本等)
【问题讨论】:
标签: apache web-crawler nutch
目前 Nutch 没有为主页提供任何特殊处理,它只是一个要抓取的 URL。如果您想这样做,您可能需要自定义 Nutch 的某些部分。
如果您要收集一组固定的 URL(通常放在种子文件中),您可以将一些元数据附加到这些 URL,并对这些 URL 使用不同的策略。例如设置一个非常高的分数和较短的获取间隔 (https://github.com/apache/nutch/blob/release-2.3.1/src/java/org/apache/nutch/crawl/InjectorJob.java#L56-L59)。
由于生成器作业将按分数对 URL 进行排序,因此只要所有其他 URL 的分数低于您用于种子 URL 的值,这应该可以工作。请记住,这将导致 Nutch 在每次新周期开始时抓取此 URL(因为种子 URL 将始终位于顶部)。
如果您在正常的抓取周期中发现了新的主页,那么这很棘手,因为 Nutch 无法检测给定的 URL 是否是主页。对于这种情况,您需要检查当前 URL 是否是主页,如果确实是主页,则需要修改 score/fetch 间隔以确保该 URL 最终位于排名靠前的 URL。
这种解决方法可能会导致一些问题:Nutch 可能最终只抓取主页而不是其余的 URL,这不是一个好的案例。
您也可以编写自己的生成器,这样您就拥有更多的控制权,而不仅仅依赖于分数,而是单独获取间隔。
完全披露:虽然我过去使用过类似的方法,但我们最终将这个系统更改为使用StormCrawler(我们正在构建一个新闻搜索引擎),因此我们需要更多地控制何时获取页面( Nutch 的批处理性质不太适合这个用例),以及其他一些需要更多 NRT 方法的业务案例。
【讨论】: