scrapy-redis
винаги ще чака нови URL адреси да бъдат натиснати в опашката за redis. Когато опашката е празна, паякът преминава впразен ход състояние и чака нови URL адреси. Това е, което използвах, за да затворя моя паяк, след като опашката е празна.
Когато паякът е впразен ход (когато не прави нищо), проверявам дали все още има нещо останало в опашката за redis. Ако не, затварям паяка с close_spider
. Следният код се намира в spider
клас:
@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')