sql >> Database >  >> NoSQL >> Redis

Het scrapy-redis-programma sluit niet automatisch

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


  1. Redis:Sorteer en ontvang n Buursleutels

  2. Redis scanopdracht match optie werkt niet in Python

  3. Eenvoudige MySQL-database converteren naar een NoSQL-oplossing

  4. Eenvoudige planning van onderhoudsvensters in uw databaseclusters