我已经在rabbitMQ上实现了一个分布式网络爬虫。除了访问的url集之外,一切几乎都完成了。我希望在不同的爬虫之间有某种共享的变量。
此外,正如我一直读到的,这个url集的大小将是巨大的,应该存储在磁盘中。在分布式环境中存储、访问和共享访问过的urls列表的最佳方法是什么?
发布于 2017-05-13 12:44:31
正如majidkabir所说,Nutch是一个很好的solution...but,它不回答这个问题,因为它是关于在构建自己的爬虫时如何跟踪状态的。
我将提供在Node中创建爬虫(https://www.npmjs.com/package/node-nutch)时采用的方法。从名称中可以看出,我所采用的方法是以Nutch的方法为模型的。
我所做的就是使用URL作为键(在正常化之后),然后在包含爬行状态的S3中存储一个简单的JSON文件。当是时候运行下一个爬行时,我会快速浏览每个JSON文件,寻找要爬行的候选文件,然后在检索页面之后,设置JSON以指示何时爬行next。
我爬行的页面数量从来都不是很大,所以这很好,但是如果它确实变大了,我会将JSON放入类似ElasticSearch的内容中,然后根据日期字段搜索要爬行的URL。
发布于 2017-05-04 14:37:47
理想情况下,任何可伸缩且支持索引的存储都可以用于此类用例。
我所知道的用于这类目的的一些系统是索尔、ElasticSearch、Redis或任何可以扩展的SQL数据库。
我使用Redis是为了同样的目的,我已经存储了大约200万个URL。我确信,通过增加节点,我应该能够轻松地进行扩展。
发布于 2017-05-09 09:13:31
您可以使用阿帕奇·纳奇进行爬行,这个库能够在特定的时间段内爬行url,并为此目的使用一些算法。
例如:当具有特定url的页面在第二次爬行中没有更改时,增加下一次爬行的时间,如果它更改,则减少此时间段。您可以创建自己的nutch插件来解析nutch爬行的数据,或者使用预定义的nutch插件。
https://stackoverflow.com/questions/43695675
复制相似问题