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停止.
所有爬行器完成后,是否可以通过任何身体向我展示如何使反应堆停止?
我通常在 PySide 中做的事情(我使用QNetworkAccessManager许多自行创建的工作人员进行报废)是维护一个计数器,记录有多少工作人员已完成处理队列中的工作,当该计数器达到创建的工作人员数量时,会触发一个信号表示没有更多工作要做,应用程序可以执行其他操作(例如启用“导出”按钮,以便用户可以将其结果导出到文件等)。当然,这个计数器必须位于方法内部,并且必须在爬虫/蜘蛛/工作人员发出信号时调用。
这可能不是解决问题的优雅方法,但是,您尝试过吗?