使用Storm抓取工具

时间:2017-05-22 17:48:19

标签: java web-crawler apache-storm stormcrawler

我最近才发现Storm爬虫,从过去的经验和研究以及与不同爬虫一起工作,我发现这个基于Apache Storm的项目非常强大,适用于许多用例和场景。

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

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

问题:

  • 风暴爬虫是否适合这种情况?
  • 我可以将限制设置为最大提取页数 履带?
  • 我可以为不同的页面设置限制 域?
  • 我可以单独监控特定域的抓取进度吗?
  • 我是否可以动态设置设置,而无需将修改后的拓扑上传到风暴?
  • 是否可以暂停或停止抓取(针对特定域名)?
  • 通常情景搜索器是作为一个部署的拓扑运行的吗?

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

谢谢。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

很高兴你喜欢StormCrawler

  • 风暴爬虫是否适合这种情况?

可能你需要修改/自定义一些东西。

  • 我可以将限制设置为抓取工具提取的最大页数吗?

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

没有基于URL数量进行全局过滤的机制,但可以这样做。这取决于您用于存储URL状态的内容以及相应的spout和状态更新程序实现。例如,如果您使用Elasticsearch存储URL,则可以使用URL过滤器检查索引中的URL数量,并根据该URL过滤URL(现有与否)。

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

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

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

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

  • 我是否可以动态设置设置,而无需将修改后的拓扑上传到风暴?

没有。启动工作任务时将读取配置。我知道一些用户编写了一个由DB表支持的自定义配置实现,并让他们的组件从中读取,但这意味着修改了很多代码。

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

不是基于每个域,但您可以添加一个中间螺栓来检查是否应该处理域。如果不是,你可能只是失败了。这取决于状态存储再次。您还可以为ES spouts添加自定义过滤器,并在状态索引中添加一个字段。每当针对特定域停止抓取时,您可以例如修改与特定域匹配的所有URL的字段值。

  • 通常情景搜索器是作为一个部署的拓扑运行的吗?

是的,经常。

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

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

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