我最近才发现了Storm爬虫,从过去的经验和研究中,我发现这个基于Apache的项目非常健壮,适合于许多用例和场景。
我已经阅读了一些教程,并测试了风暴爬行器的一些基本设置。我想在我的项目中使用爬虫,但是有一些事情我不确定爬虫是否有能力做,甚至它是否适合这样的用例。
我想做小的和大的递归爬行在许多web域与特定的速度设置和限制取回urls的数量。爬行可以在任何时候以不同的设置单独启动(不同的速度,忽略该域的robots.txt,忽略外部链接)。
问题:
我认为,对于其中的一些问题,答案可能是定制或编写我自己的螺栓或喷口。但我宁愿避免修改Fetcher Bolt或爬虫的主要逻辑,因为这意味着我正在开发另一个爬虫。
谢谢。
发布于 2017-05-22 18:44:52
很高兴你喜欢StormCrawler
也许吧,但是您需要修改/定制一些东西。
您目前可以对种子的深度设置一个限制,并且每个种子具有不同的值。
没有基于URL数量的全局过滤机制,但这是可以做到的。这取决于您使用什么来存储URL状态以及相应的突发事件和状态更新器实现。例如,如果您使用Elasticsearch来存储URL,您可以让一个URL过滤器检查索引中的URL数量,并在此基础上筛选URL(现有的或不存在)。
您可以对上面提出的解决方案进行专门化,并在每个域或主机上查询已知的URL数量。这样做不需要对核心元素进行任何修改,只需要一个自定义URL过滤器。
同样,这取决于您使用什么作为后端。例如,使用Elasticsearch,您可以使用Kibana查看每个域的URL。
不是的。启动工作任务时读取配置。我认识一些用户,他们编写了一个由DB表支持的自定义配置实现,并从中读取了他们的组件,但这意味着要修改大量代码。
不是基于每个域,但是您可以添加一个中间螺栓来检查域是否应该被处理。如果没有,你可以简单地失败。这又取决于状态存储。例如,还可以向ES口添加自定义筛选器和状态索引中的字段。每当某个特定域的爬行停止时,您就可以修改匹配某个特定域的所有URL的字段值。
是的,经常。
StormCrawler是非常模块化的,所以总是有几种方法来做事情;-)
我非常肯定,您可以通过修改小型非核心部件来实现您想要的行为,同时具有单一的拓扑结构。如果需要代码中更重要的部分(例如,每个种子机器人设置),那么我们可能希望将其添加到代码中--您的贡献将是非常受欢迎的。
发布于 2017-05-22 17:52:32
你有非常有趣的问题。我想您可以在这里发现更多:代码:官方教程的https://github.com/DigitalPebble/storm-crawler:http://stormcrawler.net/和一些响应:storm.pdf
https://stackoverflow.com/questions/44119099
复制相似问题