scrapy-redis
zawsze będzie czekać na umieszczenie nowych adresów URL w kolejce redis. Gdy kolejka jest pusta, pająk przechodzi bezczynny stan i czeka na nowe adresy URL. Właśnie tego używałem do zamykania mojego pająka, gdy kolejka jest pusta.
Gdy pająk jest bezczynny (gdy nic nie robi), sprawdzam, czy w kolejce redis jest jeszcze coś. Jeśli nie, zamykam pająka za pomocą close_spider
. Poniższy kod znajduje się w spider
klasa:
@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')