首页 > 解决方案 > Scrapy蜘蛛之间的分布式通信

问题描述

我想以协调的方式运行两个蜘蛛。第一个蜘蛛将抓取一些网站并生成 URL,第二个蜘蛛将使用这些地址。我等不及第一个蜘蛛完成然后启动第二个,因为网站变化非常快,第一个蜘蛛生成的 URL 需要立即抓取。一个非常简单的架构如下所示。目前,我为每个抓取作业分别使用Scrapy 。知道我该怎么做吗?每个蜘蛛的行为方式不同(具有不同的设置)并执行不同的工作。将它们放在不同的机器上(分布式)会很好。

在此处输入图像描述

标签: web-scrapingscrapyscrapinghub

解决方案


你的两个蜘蛛仍然可以独立。它们不需要协调,也不需要相互通信。两者都只需要访问中央数据库。

Spider1 只负责用 URL 填充数据库表。而 Spider2 只负责读取它(如果你想跟踪,可能会更新行)。两个蜘蛛都可以独立启动/停止。如果 Spider1 停止,那么只要有 URL,Spider2 仍然可以继续运行。

在当前没有更多用于 Spider2 的 URL 的情况下,您可以通过配置spider_idle引发DontCloseSpider异常的信号(文档)来使其保持活动状态。此时您还可以从数据库中获取一批新的 URL 并对其进行爬取(信号中的爬取示例)。

或者,您可以使用类似 cron 的东西来安排每隔几分钟执行一次 Spider2。然后你不必担心让它活着。


推荐阅读