Проблема довольно проста, есть паук, который входит в систему на веб-сайте, сканирует некоторые данные и затем завершает работу.Требуемое поведение - вход в систему, сканирование данных, а затем выход из системы.
Жесткое кодирование этого невозможно, поскольку существует около 60 пауков, все они наследуются от BaseSpider.
Я пытался использовать сигналы и добавить функцию выхода из системы к сигналу spider_idle
, которая будет просто отправлять запрос на URL для выхода из системы, который должен предоставить каждый паук, хотя я не смог заставить его работать,функция выхода из системы никогда не вызывалась, и я не смог выяснить, почему нет?
Вот код:
@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
spider = super(BaseSpider, cls).from_crawler(crawler, *args, **kwargs)
crawler.signals.connect(spider.spider_idle, signal=signals.spider_idle)
def spider_idle(self, spider):
if not self.logged_out:
self.crawler.engine.crawl(Request(self.logout_url, callback=self.logout), spider)
def logout(self, response):
self.logged_out = True
Я не понимаю, почему это не сработает,Как я понимаю, сигнал spider_idle
вызывается, когда в очереди больше нет запросов / паук завершен.