【发布时间】:2017-11-23 07:30:17
【问题描述】:
我希望 Nutch 根据我自己的规则选择特定的 URL。此步骤在生成时完成。我知道如何编写解析器/索引器插件。但是如何在生成时做到这一点。我的Nutch版本是2.3系列
【问题讨论】:
标签: java hadoop web-crawler nutch
我希望 Nutch 根据我自己的规则选择特定的 URL。此步骤在生成时完成。我知道如何编写解析器/索引器插件。但是如何在生成时做到这一点。我的Nutch版本是2.3系列
【问题讨论】:
标签: java hadoop web-crawler nutch
Nutch 生成器并不是真正的 Nutch 扩展点,因此您无法编写插件来自定义它。尽管如此,没有什么能阻止您使用自己的逻辑编写自己的生成器。
您需要调整bin/nutch 和bin/crawl 脚本才能调用您自己的生成器而不是默认生成器。请记住,Nutch 的某些其他部分依赖于生成器实现的某些部分(例如SegmentMerger)。如果您自定义这些部分,那么您还需要更新一些其他类。
生成器在决定返回哪些元素时使用ScoringFilter.generatorSortValue() 方法。因此,这是一种不需要更改生成器的替代方案。
旁注,这并非完全不常见,我似乎有些客户需要定制生成器。
【讨论】:
正如 Jorge 所建议的那样,您可以编写一个评分过滤器,根据您自己的逻辑为页面分配分数,并在生成步骤中根据该逻辑进行过滤。或者,如果碰巧您的选择规则可以仅根据 URL 确定,您可以使用一个定制的 URL 规范化器,该规范化器与生成范围(或任何值)一起使用,它将 URL 重写为 URL 过滤器随后会使用的内容丢弃。您需要在生成步骤中激活过滤。这是一个丑陋的黑客攻击。
Nutch 2.x 真的很尴尬,我不确定您是否可以根据原始表格的过滤器创建表格的副本。
你使用什么 Gora 后端?
StormCrawler 在这方面更加灵活,我们最近添加了a mechanism for filtering URLs at the spout level,这正是您所需要的。你可以在 Nutch 2.x 中做类似的事情,但这可能意味着在 GORA 中也需要改变。
【讨论】: