[英]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.