Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

O programa scrapy-redis não fecha automaticamente


scrapy-redis sempre aguardará que novos URLs sejam enviados na fila de redis. Quando a fila está vazia, a aranha fica em inativo state e aguarda novas urls. Isso é o que eu usei para fechar minha aranha quando a fila está vazia.

Quando a aranha está inativa (quando não faz nada), verifico se ainda há algo na fila de redis. Se não, eu fecho o spider com close_spider . O código a seguir está localizado no spider aula:
@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')