如何在几个scrapy蜘蛛在同一过程中运行时停止反应堆

use*_*549 7 python web-crawler scrapy

我已经从这里这里读过,并让多个蜘蛛在同一个过程中运行.

但是,我不知道如何设计一个信号系统,以便在所有蜘蛛完成后停止反应堆

我的代码与以下示例非常相似:

from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy.settings import Settings
from scrapy import log
from testspiders.spiders.followall import FollowAllSpider

def setup_crawler(domain):
    spider = FollowAllSpider(domain=domain)
    crawler = Crawler(Settings())
    crawler.configure()
    crawler.crawl(spider)
    crawler.start()

for domain in ['scrapinghub.com', 'insophia.com']:
    setup_crawler(domain)
log.start()
reactor.run()
Run Code Online (Sandbox Code Playgroud)

在所有履带停止后,反应堆仍在运行.如果我添加声明

crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
Run Code Online (Sandbox Code Playgroud)

对于setup_crawler函数,当第一个爬虫关闭时,reactor停止.

所有爬行器完成后,是否可以通过任何身体向我展示如何使反应堆停止?

sha*_*kra 1

我通常在 PySide 中做的事情(我使用QNetworkAccessManager许多自行创建的工作人员进行报废)是维护一个计数器,记录有多少工作人员已完成处理队列中的工作,当该计数器达到创建的工作人员数量时,会触发一个信号表示没有更多工作要做,应用程序可以执行其他操作(例如启用“导出”按钮,以便用户可以将其结果导出到文件等)。当然,这个计数器必须位于方法内部,并且必须在爬虫/蜘蛛/工作人员发出信号时调用。

这可能不是解决问题的优雅方法,但是,您尝试过吗?