我最近才发现Storm爬虫,从过去的经验和研究以及与不同爬虫一起工作,我发现这个基于Apache Storm的项目非常强大,适用于许多用例和场景。
我已经阅读了一些教程并使用一些基本设置测试了风暴爬虫。我想在我的项目中使用爬虫,但有些事情我不确定爬虫是否能够做到,或者即使它适合这种用例。
我想在许多具有特定速度设置的网域上进行小型和大型递归爬网,并限制获取网址的数量。可以使用不同的设置(不同的速度,忽略该域的robots.txt,忽略外部链接)随时单独启动爬网。
问题:
我认为对于其中一些问题,答案可能是定制或编写我自己的螺栓或喷口。但我宁愿避免修改Fetcher Bolt或爬虫的主要逻辑,因为这意味着我正在开发另一个爬虫。
谢谢。
答案 0 :(得分: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
答案 1 :(得分:0)
很高兴你喜欢StormCrawler
可能你需要修改/自定义一些东西。
您目前可以对种子的深度设置限制,并为每个种子设置不同的值。
没有基于URL数量进行全局过滤的机制,但可以这样做。这取决于您用于存储URL状态的内容以及相应的spout和状态更新程序实现。例如,如果您使用Elasticsearch存储URL,则可以使用URL过滤器检查索引中的URL数量,并根据该URL过滤URL(现有与否)。
您可以专门化上面提出的解决方案,并针对每个域或主机查询已知的URL数量。这样做不需要对核心元素进行任何修改,只需要自定义URL过滤器。
同样,这取决于你使用什么作为后端。例如,使用Elasticsearch,您可以使用Kibana查看每个域的URL。
没有。启动工作任务时将读取配置。我知道一些用户编写了一个由DB表支持的自定义配置实现,并让他们的组件从中读取,但这意味着修改了很多代码。
不是基于每个域,但您可以添加一个中间螺栓来检查是否应该处理域。如果不是,你可能只是失败了。这取决于状态存储再次。您还可以为ES spouts添加自定义过滤器,并在状态索引中添加一个字段。每当针对特定域停止抓取时,您可以例如修改与特定域匹配的所有URL的字段值。
是的,经常。
StormCrawler是非常模块化的,所以总有几种方法可以做到; - )
我很确定通过修改小的非核心部分,您可以在拥有单一拓扑的同时获得所需的行为。如果需要代码的更重要部分(例如,每个种子机器人设置),那么我们可能希望将其添加到代码中 - 您的贡献将非常受欢迎。