Я лично рекомендую начинать новый паук каждый раз, когда вам нужно что-то сканировать, но если вы хотите сохранить этот процесс в живых, я бы рекомендовал использовать сигнал spider_idle
:
@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
spider = super(MySpider, cls).from_crawler(crawler, *args, **kwargs)
crawler.signals.connect(spider.spider_closed, signals.spider_closed)
crawler.signals.connect(spider.spider_idle, signals.spider_idle)
return spider
...
def spider_idle(self, spider):
# read database again and send new requests
# check that sending new requests here is different
self.crawler.engine.crawl(
Request(
new_url,
callback=self.parse),
spider
)
Здесь вы отправляете новые запросы до того, как паук действительно закроется.