Scrapy蜘蛛之间的分布式通信

时间:2019-03-14 09:24:06

标签: web-scraping scrapy scrapinghub

我想以协调的方式经营两只蜘蛛。第一个蜘蛛将抓取一些网站并生成URL,第二个蜘蛛将使用这些地址。我等不及第一个蜘蛛完成,然后启动第二个蜘蛛,因为网站变化非常快,并且第一个蜘蛛产生的URL需要立即删除。下面显示了一个非常简单的体系结构。目前,我分别为每个抓取作业使用 Scrapy 。知道我该怎么办吗?每个蜘蛛都有不同的行为方式(具有不同的设置)和不同的工作。最好将它们放在不同的计算机上(分布式)。

enter image description here

2 个答案:

答案 0 :(得分:0)

一个主意,也许是个坏主意

运行第一个蜘蛛,将抓取的URL保存到数据库中

像这样单独运行第二蜘蛛

def start_requests(self):
    while 1:
        select url from 1st_spider_urls
        yield Request(url)

        if first_spider_finished:
            break

它将继续从表中获取URL并立即将其抓取

答案 1 :(得分:0)

您的两个蜘蛛仍然可以是独立的。他们不需要协调,也不需要彼此交流。两者都只需要访问中央数据库。

Spider1仅负责用URL填充数据库表。 Spider2只是负责从中读取(如果您想跟踪的话,还可以更新行)。两个蜘蛛可以独立启动/停止。如果Spider1停止,那么只要有URL,Spider2仍然可以继续运行。

在当前没有更多Spider2 URL的情况下,可以通过配置引发spider_idle异常(documentation)的DontCloseSpider信号使其保持活动状态。此时,您还可以从数据库中提取一批新的URL并对其进行爬网(example of crawling in signal)。

或者,您可以仅使用cron之类的程序来安排每隔几分钟执行一次Spider2。这样您就不必担心保持其生存状态。