Redis
 sql >> Database >  >> NoSQL >> Redis

Il programma scrapy-redis non si chiude automaticamente

scrapy-redis aspetterà sempre che i nuovi URL vengano inseriti nella coda di redis. Quando la coda è vuota, lo spider va in inattivo stato e attende nuovi URL. È quello che ho usato per chiudere il mio ragno una volta che la coda è vuota.

Quando il ragno è in inattivo (quando non fa nulla), controllo se c'è ancora qualcosa rimasto nella coda di redis. In caso contrario, chiudo lo spider con close_spider . Il codice seguente si trova in spider classe:

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