我在一个使用Scrapy的爬虫项目中工作,我需要将我的爬虫分布在集群中的不同节点上,以使过程更快。我正在使用ScrapydWeb来管理它,并且我已经配置了两台机器,其中一台配置了ScrapydWeb up,两台都配置了Scrapyd up。Web应用程序可以识别这两种情况,我可以正常运行爬行器。问题是爬行是并行运行的(内容是由两台机器获取的),我的目的是以一种分布式的方式进行爬行,以最小化爬行时间。
有人能帮我吗?提前谢谢你。
发布于 2020-05-07 13:45:53
我不认为Scrapyd & ScrapydWeb提供了跨不同服务器运行爬行器的可能性,而不仅仅是完全运行相同的爬行器。如果您想要分发爬网,您可以:
发布于 2020-08-10 10:59:34
我使用Scrapy Cluster解决了这个问题,并分享了我的经验:
Docker安装对我来说很难控制和调试,所以我尝试了Cluster Quick-start,它工作得更好。
我的集群中有五台机器可用,其中一台用来托管Apache Kafka和Zookeeper。我还为Redis DB准备了一个。重要的是要确保这些机器可以从你要用于爬网的机器上进行外部访问。
在正确安装并运行这三个组件之后,我在python3.6环境中安装了Scrapy Cluster的要求。然后,我使用主机的IP地址配置了一个本地设置文件,并确保所有在线和离线测试都通过了。
一切就绪后,我就可以运行第一个爬虫了(官方文档提供了一个示例)。其思想是为爬行器创建实例(例如,您可以使用tmux打开10个不同的终端窗口,并在每个窗口中运行一个实例)。当您向Apache Kafka提供一个要爬行的URL时,它将被发送到Redis的一个队列,您的实例将定期在该队列中查找要爬行的新页面。
如果您的爬行器从您最初传递的URL生成更多的URL,它们将返回到Redis,可能会被其他实例爬行。这就是你可以看到这个发行版的力量的地方。
一旦一个页面被抓取,结果就会被发送到Kafka主题。
official documentation非常庞大,您可以找到有关安装和设置的更多详细信息。
https://stackoverflow.com/questions/61640365
复制相似问题