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