【问题标题】:Domain-specific crawling with different settings for each domain (e.g. speed) using Storm crawler使用 Storm crawler 对每个域(例如速度)进行不同设置的域特定爬虫
【发布时间】:2017-05-22 17:48:18
【问题描述】:

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

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

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

问题:

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

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

谢谢。

【问题讨论】:

    标签: java web-crawler apache-storm stormcrawler


    【解决方案1】:

    很高兴你喜欢 StormCrawler

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

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

    • 能否将限制设置为爬虫抓取的最大页面数?

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

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

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

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

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

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

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

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

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

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

    • storm crawler 通常作为一个部署的拓扑运行吗?

    是的,经常。

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

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

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

    【讨论】:

    • 非常感谢您快速、非常有帮助和全面的回答。 :-) 还有一个问题:您提到弹性搜索作为存储 url 状态的示例。我在其他一些帖子中也注意到了它,我想知道它与 sql 存储或其他存储的状态相比如何,因为我一直认为 elasticsearch 最适合索引文档,而不是频繁更新 url 状态。再次感谢您。
    • 你好米兰。 ES 后端可能是 SC 中使用最广泛的后端,因为它具有出色的性能、可扩展性和出色的功能,例如与 Kibana。 SQL 几乎没有使用过,相比之下非常基础
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多