【问题标题】:Create Scrapy never ending spider创建 Scrapy 永无止境的蜘蛛
【发布时间】:2016-06-09 06:42:17
【问题描述】:

我创建了一个scrapy 库scrapy-mq-redis 并希望让蜘蛛永无止境。我已经使用 spider_idle 信号处理程序来阻止它关闭(从上游库中挑选它)。

有没有办法在这个函数中访问调度程序,以便我可以调用 next_request 函数并处理进一步的传入请求,或者甚至更多的 start_urls?

如果需要进一步说明,请告诉我。

编辑:可能的重复问题有一个自定义的 create_request 方法。 对于我的库,我需要通过接收消息的完全相同的通道向 RabbitMQ 发送消息确认。这就是为什么调度程序/队列中有一个侦听器用于处理请求(response_received)。所以,我特别要使用调度器来创建请求。

另一种方法是在我的蜘蛛中为 response_received 设置另一个侦听器,这意味着所有请求/响应的广播将发送到两个方法,然后我必须确定是否从特定进程接收到消息,然后相应地发送确认。这会在两个不同的模块中增加额外的处理和相同进程的重复。

我希望这能澄清我的要求。

【问题讨论】:

标签: python scrapy pika


【解决方案1】:

我发现调度程序在蜘蛛中可用,如下所示:

self.crawler.engine.slot.scheduler.next_request()

我在蜘蛛中添加了如下监听器:

self.crawler.signals.connect(self.spider_idle, signal=signals.spider_idle)

回调如下:

def spider_idle(self):
    self.crawler.engine.slot.scheduler.next_request()
    raise DontCloseSpider

这使蜘蛛保持活动状态,并寻找可能已添加到队列中的新请求。

【讨论】:

    猜你喜欢
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多