Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Das Scrapy-Redis-Programm wird nicht automatisch geschlossen

scrapy-redis wird immer darauf warten, dass neue URLs in die Redis-Warteschlange gepusht werden. Wenn die Warteschlange leer ist, geht die Spinne in den Leerlauf Zustand und wartet auf neue URLs. Das habe ich verwendet, um meine Spinne zu schließen, sobald die Warteschlange leer ist.

Wenn sich die Spinne im Leerlauf befindet (wenn es nichts tut), prüfe ich, ob noch etwas in der Redis-Warteschlange übrig ist. Wenn nicht, schließe ich den Spider mit close_spider . Der folgende Code befindet sich im spider Klasse:

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