gpt4 book ai didi

scrapy - 在scrapy的同一进程中运行多个蜘蛛后如何停止 react 器?

转载 作者:行者123 更新时间:2023-12-04 23:50:46 28 4
gpt4 key购买 nike

我有几个不同的蜘蛛,想一次运行所有它们。基于 thisthis ,我可以在同一个进程中运行多个蜘蛛。但是,我不知道如何设计一个信号系统来在所有蜘蛛都完成后停止 react 器。

我试过了:

crawler.signals.connect(reactor.stop, signal=signals.spider_closed)


crawler.signals.connect(reactor.stop, signal=signals.spider_idle)

在这两种情况下,当第一个履带关闭时 react 器就会停止。
当然,我希望 react 堆在所有蜘蛛都完成后停止。

有人可以告诉我如何做这个把戏吗?

最佳答案

经过一夜的 sleep ,我意识到我知道该怎么做。我只需要一个计数器:

from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy import log, signals
from scrapy.utils.project import get_project_settings

class ReactorControl:

def __init__(self):
self.crawlers_running = 0

def add_crawler(self):
self.crawlers_running += 1

def remove_crawler(self):
self.crawlers_running -= 1
if self.crawlers_running == 0 :
reactor.stop()

def setup_crawler(spider_name):
crawler = Crawler(settings)
crawler.configure()
crawler.signals.connect(reactor_control.remove_crawler, signal=signals.spider_closed)
spider = crawler.spiders.create(spider_name)
crawler.crawl(spider)
reactor_control.add_crawler()
crawler.start()

reactor_control = ReactorControl()
log.start()
settings = get_project_settings()
crawler = Crawler(settings)

for spider_name in crawler.spiders.list():
setup_crawler(spider_name)

reactor.run()

我假设 Scrapy 不是平行的。

我不知道这是否是最好的方法,但它有效!

编辑:更新。请参阅@Jean-Robert 评论。

关于scrapy - 在scrapy的同一进程中运行多个蜘蛛后如何停止 react 器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22825492/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com