簡體   English   中英

從 Scrapy 管道中提升關閉蜘蛛

[英]Raise close spider from Scrapy pipeline

我需要從 Scrapy 管道中提升 CloseSpider。 要么將管道中的一些參數返回給 Spider 以進行加注。

例如,如果日期已經存在,則引發 CloseSpider:

raise CloseSpider('Already been scraped:' + response.url)

有沒有辦法做到這一點?

從scrapy docs 開始,CloseSpider 異常只能從Spider 中的回調函數(默認為解析函數)引發。 在管道中提高它會使蜘蛛崩潰。 為了從管道中獲得類似的結果,您可以啟動一個關閉信號,這將優雅地關閉scrapy。

from scrapy.project import crawler  
crawler._signal_shutdown(9,0)

請記住,即使在啟動關閉信號之后,scrapy 也可能會處理已經觸發甚至預定的請求。

要從 Spider 執行此操作,請像這樣在來自 Pipeline 的 Spider 中設置一些變量。

def process_item(self, item, spider):
    if some_condition_is_met:
        spider.close_manually = True

在您的蜘蛛的回調函數中,您可以在此之后引發關閉蜘蛛異常。

def parse(self, response):
    if self.close_manually:
        raise CloseSpider('Already been scraped.')

我更喜歡以下解決方案。

class MongoDBPipeline(object):

def process_item(self, item, spider):
    spider.crawler.engine.close_spider(self, reason='duplicate')

來源: 強制蜘蛛停止在scrapy

暫無
暫無

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

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