我已经为 apache Nutch 2.3.1 配置了完整的 Hadoop/Hbase 生态系统。我希望我的爬虫应该更多地优先考虑在每次迭代中以种子形式给出的那些域。根据我的测试;它可以在任一方向完成,即从外链接中选择所有网址,反之亦然。可以说,我希望 40% 的选定 URL 应该来自外链(种子中给出的除外),并且 60% 的 URL 应该属于种子中给出的域。有可能吗?怎么做?
我认为是生成器步骤导致了这种行为。
我已经为 apache Nutch 2.3.1 配置了完整的 Hadoop/Hbase 生态系统。我希望我的爬虫应该更多地优先考虑在每次迭代中以种子形式给出的那些域。根据我的测试;它可以在任一方向完成,即从外链接中选择所有网址,反之亦然。可以说,我希望 40% 的选定 URL 应该来自外链(种子中给出的除外),并且 60% 的 URL 应该属于种子中给出的域。有可能吗?怎么做?
我认为是生成器步骤导致了这种行为。
首先,对于 60%、40% 的比例,Nutch 不提供任何内置机制。话虽如此,我认为这个答案(https://stackoverflow.com/a/49240868/1977773)中的很多内容都适用于此。
生成器将按分数对 URL 进行排序,然后为下一个周期收集前 n 个 URL。一种方法是最初在种子文件中添加高分(https://github.com/apache/nutch/blob/master/src/java/org/apache/nutch/crawl/Injector.java#L80)所以当 URL 添加到您的 crawldb 时,这个较高的分数将传播到外链接,因此当下一个周期到来时,您将对来自种子文件的那些外链接有一些“偏好”。
考虑到您的种子 URL 上可能有一个指向不同域的外链接,这可能会增加一些噪音,并且分数也会被传播。这可以通过种子文件中的自定义属性和自定义评分过滤器来解决,这样您就可以为同一域中的这些链接提供更高的分数。
但是,如果您真的想达到 60/40 的比率(或某种确定性),我认为当您完全控制要抓取的 URL 时,可以使用自定义生成器。