簡體   English   中英

在關閉Scrapy Spider之前提出最終請求

[英]Make a final Request before closing Scrapy spider

問題很簡單,有一個蜘蛛可以登錄到網站,抓取一些數據然后退出。 所需的行為是登錄,爬網數據然后注銷。

不可能對其進行硬編碼,因為大約有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信號。

我已經使用Scrapy多年了,最終遇到了像您這樣的情況

實現目標的唯一解決方案是在spider_closed方法內使用Python的請求庫

spider_idle等無濟於事

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM