scrapy-redis程序不会自动关闭

2024-03-23

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

  • 运行代码:

2017-08-07 09:17:06 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2017-08-07 09:18:06 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)

  • 我用scrapy-redis爬取一个网站,scrapy-redis不会自动关闭,仍然要询问url,但是没有url。所以永远都会scraped 0 items (at 0 items/min)

scrapy-redis将始终等待新的 url 被推送到 redis 队列中。当队列为空时,蜘蛛就进去idle状态并等待新的 url。这就是我在队列为空时用来关闭蜘蛛的方法。

当蜘蛛进来的时候idle(当它什么都不做时),我检查 redis 队列中是否还有剩余的东西。如果没有,我会关闭蜘蛛close_spider。以下代码位于spider class:

@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')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scrapy-redis程序不会自动关闭 的相关文章

随机推荐