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