当带有 extract() 的 Scrapy 选择器返回 None 时如何设置默认值?

Posted

技术标签:

【中文标题】当带有 extract() 的 Scrapy 选择器返回 None 时如何设置默认值?【英文标题】:How to set a default value when Scrapy selector with extract() returns None? 【发布时间】:2019-04-13 18:15:04 【问题描述】:

我正在尝试生成一个标签的值,该标签并不总是出现在我用 Scrapy 抓取的页面中。我使用的是extract() 函数而不是extract_first()。因此,我似乎无法设置默认值,就像 this SO post 中建议的那样。

这不起作用:

def parse(self, response):
        yield 
          'comments': response.css('[itemprop=commentCount]::attr(content)').extract(default=None)
          

当我想使用extract() 而不是extract_first() 时,如何将None 设置为默认值?

提前非常感谢!

【问题讨论】:

【参考方案1】:

.extract() 以列表形式生成输出,.extract_first() 生成字符串。

response.xpath('xpath_of_the_component').extract_first(default="default_value").split()

这行代码将再次将字符串转换为列表并设置默认值(如果不可用)。

【讨论】:

【参考方案2】:

试试这个语法:

'comments': response.css('[itemprop=commentCount]::attr(content)').extract() or None

如果response.css(CSS) 的结果为空列表,则None 将被分配为comments 键的值。否则,将分配实际值

【讨论】:

以上是关于当带有 extract() 的 Scrapy 选择器返回 None 时如何设置默认值?的主要内容,如果未能解决你的问题,请参考以下文章

在 Scrapy 中使用 Xpath 选择段落下方的任何文本

scrapy 按顺序抓取text内容

Scrapy里Selectors 四种基础的方法

scrapy LinkExtractors

使用带有 Scrapy 的 css 选择器获取 href

scrapy