Redis
 sql >> Base de données >  >> NoSQL >> Redis

Le programme scrapy-redis ne se ferme pas automatiquement

scrapy-redis attendra toujours que de nouvelles URL soient poussées dans la file d'attente Redis. Lorsque la file d'attente est vide, l'araignée passe en inactif état et attend de nouvelles URL. C'est ce que j'ai utilisé pour fermer mon araignée une fois la file d'attente vide.

Lorsque l'araignée est en inactivité (quand ça ne fait rien), je vérifie s'il reste encore quelque chose dans la file d'attente redis. Sinon, je ferme l'araignée avec close_spider . Le code suivant est situé dans le spider classe :

@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')