繁体   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