我最近才发现了storm crawler,根据过去的经验和研究以及与不同爬虫的合作,我发现这个基于ApacheStorm的项目非常健壮,适用于许多用例和场景。
我已经阅读了一些教程,并测试了一些基本设置风暴爬虫。我想在我的项目中使用爬虫,但有些事情我不确定爬虫是否有能力做,甚至它是否适合这样的用例。
我想做一些小的和大的递归爬行在许多特定的速度设置和限制提取的网址数量的web域。爬网可以在任何时候使用不同的设置(不同的速度、忽略该域的robots.txt、忽略外部链接)分别启动。
问题:
风暴爬虫适合这样的场景吗?
我可以将限制设置为爬网程序获取的最大页数吗?
我可以为不同的域设置获取页面的数量限制吗?
我可以单独监视特定域的爬网进度吗?
我可以动态设置设置而不需要上传修改后的拓扑到风暴?
是否可以暂停或停止爬网(对于特定域)?
风暴爬虫通常作为一个部署的拓扑运行吗?
我认为,对于这些问题的答案可能是在定制或编写自己的螺栓或喷口。但我宁愿避免修改fetcherbolt或crawler的主逻辑,因为这意味着我正在开发另一个crawler。
谢谢您。
2条答案
按热度按时间pdkcd3nj1#
你有非常有趣的问题。我想你可以在这里发现更多的东西code:https://github.com/digitalpebble/storm-crawler官方教程:http://stormcrawler.net/ 还有一些React:http://2015.berlinbuzzwords.de/sites/2015.berlinbuzzwords.de/files/media/documents/julien_nioche-low_latency_scalable_web_crawling_on_apache_storm.pdf
qltillow2#
很高兴你喜欢风暴爬虫
风暴爬虫适合这样的场景吗?
可能,但你需要修改/定制一些东西。
我可以将限制设置为爬网程序获取的最大页数吗?
当前可以设置种子深度的限制,并且每个种子具有不同的值。
没有基于url数量进行全局过滤的机制,但这是可以做到的。它取决于您用来存储url状态的内容以及相应的spout和status更新程序实现。例如,如果您使用elasticsearch存储url,您可以让url过滤器检查索引中url的数量,并基于此过滤url(存在或不存在)。
我可以为不同的域设置获取页面的数量限制吗?
您可以专门化上面提出的解决方案,并按域或主机查询已知的url数量。这样做不需要对核心元素进行任何修改,只需要一个定制的url过滤器。
我可以单独监视特定域的爬网进度吗?
同样,这取决于您使用什么作为后端。例如,使用elasticsearch,可以使用kibana查看每个域的url。
我可以动态设置设置而不需要上传修改后的拓扑到风暴?
否。当辅助任务启动时,将读取配置。我知道有些用户编写了一个由db表支持的自定义配置实现,并让他们的组件从中读取数据,但这意味着要修改大量代码。
是否可以暂停或停止爬网(对于特定域)?
不是基于每个域,但是您可以添加一个中间螺栓来检查是否应该处理一个域。如果不是这样的话,你就不能通过确认。这又取决于存储的状态。例如,您还可以向es喷口添加一个自定义过滤器,并在状态索引中添加一个字段。每当特定域的爬网应该停止时,您可以修改与特定域匹配的所有URL的字段值。
风暴爬虫通常作为一个部署的拓扑运行吗?
是的,经常。
我认为,对于这些问题的答案可能是在定制或编写自己的螺栓或喷口。但我宁愿避免修改fetcherbolt或crawler的主逻辑,因为这意味着我正在开发另一个crawler。
stormcrawler是非常模块化的,所以总是有几种方式来做事情;-)
我敢肯定,你可以有你想要的行为,而有一个单一的拓扑修改小的非核心部分。如果需要代码中更重要的部分(例如,每种子机器人设置),那么我们可能希望将其添加到代码中-非常欢迎您的贡献。