sql >> Base de Datos >  >> NoSQL >> Redis

El programa scrapy-redis no se cierra automáticamente

scrapy-redis siempre esperará a que se envíen nuevas URL a la cola de redis. Cuando la cola está vacía, la araña entra en inactivo estado y espera nuevas direcciones URL. Eso es lo que solía cerrar mi araña una vez que la cola está vacía.

Cuando la araña está en inactivo (cuando no hace nada), compruebo si todavía queda algo en la cola de redis. Si no, cierro la araña con close_spider . El siguiente código se encuentra en el spider clase:

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