1

我最近才发现 Storm 爬虫,根据过去的经验和研究以及使用不同的爬虫,我发现这个基于 Apache Storm 的项目非常健壮,适用于许多用例和场景。

我已经阅读了一些教程并使用一些基本设置测试了风暴爬虫。我想在我的项目中使用爬虫,但有些事情我不确定爬虫是否能够做,或者即使它是否适合这样的用例。

我想在许多具有特定速度设置并限制获取的 url 数量的 web 域上进行大小递归爬网。可以随时使用不同的设置单独启动爬网(不同的速度,忽略该域的 robots.txt,忽略外部链接)。

问题:

  • 风暴爬虫适合这样的场景吗?
  • 我可以将限制设置为爬虫获取的最大页面数吗?
  • 我可以为不同域设置获取页面数量的限制吗?
  • 我可以单独监控特定域的爬取进度吗?
  • 我可以动态设置设置而不需要将修改后的拓扑上传到storm吗?
  • 是否可以暂停或停止抓取(针对特定域)?
  • 风暴爬虫通常作为一种部署的拓扑运行吗?

我认为对于其中一些问题,答案可能是定制或编写我自己的螺栓或喷口。但我宁愿避免修改 Fetcher Bolt 或爬虫的主要逻辑,因为这意味着我正在开发另一个爬虫。

谢谢你。

4

2 回答 2

2

很高兴你喜欢 StormCrawler

  • 风暴爬虫适合这样的场景吗?

可能,但您需要修改/自定义一些东西。

  • 我可以将限制设置为爬虫获取的最大页面数吗?

您当前可以设置种子深度的限制,并为每个种子设置不同的值。

没有基于 URL 数量进行全局过滤的机制,但可以这样做。这取决于您使用什么来存储 URL 状态以及相应的 spout 和状态更新器实现。例如,如果您使用 Elasticsearch 来存储 URL,您可以让 URL 过滤器检查索引中的 URL 数量并根据它过滤 URL(存在或不存在)。

  • 我可以为不同域设置获取页面数量的限制吗?

您可以专门化上面提出的解决方案,并按域或主机查询已知 URL 的数量。这样做不需要对核心元素进行任何修改,只需一个自定义 URL 过滤器。

  • 我可以单独监控特定域的爬取进度吗?

同样,这取决于您使用什么作为后端。以 Elasticsearch 为例,您可以使用 Kibana 查看每个域的 URL。

  • 我可以动态设置设置而不需要将修改后的拓扑上传到storm吗?

否。在启动工作任务时读取配置。我知道一些用户编写了一个由数据库表支持的自定义配置实现,并让他们的组件从中读取,但这意味着修改大量代码。

  • 是否可以暂停或停止抓取(针对特定域)?

不是基于每个域,但您可以添加一个中间螺栓来检查是否应该处理域。如果不是,您可以简单地使 ack 失败。这又取决于状态存储。例如,您还可以向 ES spout 添加自定义过滤器,并在状态索引中添加一个字段。每当应停止对特定域的爬网时,您可以例如修改与特定域匹配的所有 URL 的字段值。

  • 风暴爬虫通常作为一种部署的拓扑运行吗?

是的,经常。

  • 我认为对于其中一些问题,答案可能是定制或编写我自己的螺栓或喷口。但我宁愿避免修改 Fetcher Bolt 或爬虫的主要逻辑,因为这意味着我正在开发另一个爬虫。

StormCrawler 是非常模块化的,所以总是有几种做事的方法 ;-)

我很确定你可以通过修改小的非核心部分来获得你想要的行为,同时拥有一个单一的拓扑。如果需要代码的更多重要部分(例如每个种子机器人设置),那么我们可能希望将其添加到代码中 - 您的贡献将非常受欢迎。

于 2017-05-22T18:44:52.063 回答
0

你有非常有趣的问题。我想你可以在这里发现更多:代码:https ://github.com/DigitalPebble/storm-crawler官方教程:http ://stormcrawler.net/和一些回应:http: //2015.berlinbuzzwords.de/sites /2015.berlinbuzzwords.de/files/media/documents/julien_nioche-low_latency_scalable_web_crawling_on_apache_storm.pdf

于 2017-05-22T17:52:32.140 回答