【问题标题】:Make a final Request before closing Scrapy spider在关闭 Scrapy 蜘蛛之前发出最终请求
【发布时间】:2019-06-09 21:22:09
【问题描述】:

问题很简单,有一个蜘蛛登录到一个网站,爬取一些数据然后退出。所需的行为是登录、爬取数据然后注销。

硬编码是不可能的,因为大约有 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 信号在队列中没有更多请求/蜘蛛完成时被调用。

【问题讨论】:

    标签: python scrapy


    【解决方案1】:

    我使用 Scrapy 已经很多年了,最终遇到了像你这样的场景

    实现目标的唯一解决方案是在 spider_closed 方法中使用 Python 的 requests 库

    spider_idle 等无济于事

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多