scrapy-redis
zal altijd wachten tot nieuwe URL's in de redis-wachtrij worden gepusht. Wanneer de wachtrij leeg is, gaat de spider in inactief staat en wacht op nieuwe URL's. Dat is wat ik gebruikte om mijn spider te sluiten zodra de wachtrij leeg is.
Wanneer de spin inactief is (wanneer het niets doet), controleer ik of er nog iets over is in de redis-wachtrij. Zo niet, dan sluit ik de spider met close_spider
. De volgende code bevindt zich in de spider
klas:
@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')