【发布时间】:2017-07-30 14:28:36
【问题描述】:
我的目标是构建一个分布式爬虫,一次处理多个网站和多个查询。 为此,我使用“requests”和“BeautifulSoup”等标准包在 Python 中构建了一个网络爬虫。它工作正常。 为了使其分布式,我使用了rabbitMQ。它使我能够通过超过 1 个进程来帮助爬网,从而使系统更快。
我的系统在工作池模型中工作:
- 我有一个主服务器接收查询并为每个查询开始新的爬网。
- 开始抓取时,通过将查询输入搜索引擎来收集一些网址。
- 从现在开始,主服务器使用 rabbitMQ 将 url 发送到可用的 worker/进程,并等待从它们那里接收更多的 url。
但是我这个架构有个很大的瓶颈,而且不是主服务器……rabbitMQ不允许我一次消费超过1条消息(channel.basic_qos()函数不起作用!) . 我想要的是为每个查询(就像我现在拥有的那样)建立一个私有队列,并且能够尽可能快地同时处理这两个查询。通过这种方式,并行化工作人员代码,以便它可以处理最大数量的 url,而不是一次处理 1 个 url。
我应该用什么来代替rabbitMQ?我专门联系了rabbitMQ的开发人员,而我想要的东西不能用它来完成,所以我试图找到一个不同的“分发包”。也许是卡夫卡?
【问题讨论】:
标签: python parallel-processing rabbitmq web-crawler distributed-computing