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