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

时间:2018-11-10 10:53:10

标签: python web-scraping scrapy css-selectors

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

这不起作用:

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

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

非常感谢!

2 个答案:

答案 0 :(得分:4)

尝试以下语法:

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

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

答案 1 :(得分:1)

.extract()产生一个列表输出,.extract_first()产生一个字符串。

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

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