Сделайте окончательный запрос перед закрытием Scrapy Spider - PullRequest
0 голосов
/ 10 июня 2019

Проблема довольно проста, есть паук, который входит в систему на веб-сайте, сканирует некоторые данные и затем завершает работу.Требуемое поведение - вход в систему, сканирование данных, а затем выход из системы.

Жесткое кодирование этого невозможно, поскольку существует около 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 вызывается, когда в очереди больше нет запросов / паук завершен.

1 Ответ

1 голос
/ 12 июня 2019

Я использую Scrapy много лет и в итоге оказался в таком сценарии, как ваш

Единственным решением для достижения вашей цели является использование библиотеки запросов Python внутри метода spider_closed

spider_idle и т. Д. Не помогают

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...