gpt4 book ai didi

python - scrapy-redis程序不会自动关闭

转载 作者:可可西里 更新时间:2023-11-01 11:12:59 32 4
gpt4 key购买 nike

  • scrapy-redis框架,redis存储xxx:请求已经爬取完毕,但是程序还在运行,如何自动停止程序,而不是一直运行?

  • 运行代码:


2017-08-07 09:17:06 [scrapy.extensions.logstats] 信息:抓取 0 页(0 页/分钟),抓取 0 项(0 项/分钟)
2017-08-07 09:18:06 [scrapy.extensions.logstats] 信息:抓取 0 页(0 页/分钟),抓取 0 项(0 项/分钟)

  • 我用scrapy-redis爬取一个站点,scrapy-redis不会自动关闭,还要问url,一直没有url。所以它总是抓取 0 件元素(以 0 件/分钟的速度)

最佳答案

scrapy-redis 会一直等待新的 url 被推送到 redis 队列中。当队列为空时,爬虫进入idle 状态并等待新的 url。这就是我用来在队列为空后关闭蜘蛛程序的方法。

当蜘蛛处于空闲时(当它什么都不做时),我检查redis队列中是否还有剩余的东西。如果没有,我将使用 close_spider 关闭蜘蛛。以下代码位于 spider 类中:

@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
from_crawler = super(SerpSpider, cls).from_crawler
spider = from_crawler(crawler, *args, **kwargs)
crawler.signals.connect(spider.idle, signal=scrapy.signals.spider_idle)
return spider


def idle(self):
if self.q.llen(self.redis_key) <= 0:
self.crawler.engine.close_spider(self, reason='finished')

关于python - scrapy-redis程序不会自动关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45540569/

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