scrapy-redis
akan selalu menunggu url baru didorong dalam antrian redis. Saat antrian kosong, laba-laba masuk idle menyatakan dan menunggu url baru. Itulah yang saya gunakan untuk menutup laba-laba saya setelah antrian kosong.
Saat laba-laba dalam idle (ketika tidak melakukan apa-apa), saya memeriksa apakah masih ada sesuatu yang tersisa di antrian redis. Jika tidak, saya menutup laba-laba dengan close_spider
. Kode berikut terletak di spider
kelas:
@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')