首页 > 解决方案 > 使 StormCrawler 能够爬取具有多个 spout 的单个域

问题描述

我正在使用 StormCrawler 和 Elasticsearch 进行概念验证,以仅抓取一个域,几个主机 - 一个包含许多页面。有没有办法告诉stormcrawler不要将主机或域的所有url分组在一个spout中?

我按照 Youtube 教程进行设置,并将 spout 设置为 10 个并行度,但据我所知,风暴 UI 仅使用 1 个。如何让它传播单个域的 url,甚至一个主机覆盖所有的 spout?

谢谢!吉姆

标签: web-crawlerstormcrawler

解决方案


要对每个主机的 URL 进行分区,您的配置应该有partition.url.mode: "byHost"这是默认值。这会将属于不同主机的 URL 放入不同的分片中,并且将使用更多的 spout 实例。

来自同一主机的 URL 被放在相同的分片中以强制执行礼貌。如果您想从主机并行获取,您可以简单地将fetcher.threads.per.queue设置为您想要的任何值。如果该网站是您自己的,这是可以接受的,但如果它属于其他人,则显然是不礼貌的。即使您继续对每个主机进行分片,这也可以正常工作。

当然,您可以通过将es.status.routing设置为 false 来完全禁用路由。无论主机名如何,ES 都会对 URL 进行分片,并且将使用所有分片和 spout。然而,这意味着对礼貌没有严格的控制。


推荐阅读