使用XPath和scrapy提取第一个元素

Lui*_*uez 2 xpath scrapy web-scraping

我用来.extract()从xpath获取数据,如:

response.xpath('//*@id="bakery"]/span[2]/text()').extract()
Run Code Online (Sandbox Code Playgroud)

这个问题是我总是得到一个列表作为回应.例如:

['23']
Run Code Online (Sandbox Code Playgroud)

我只想要这个号码,所以我尝试:

response.xpath('//*@id="bakery"]/span[2]/text()').extract()[0]
Run Code Online (Sandbox Code Playgroud)

但这是一个问题是列表为空,虽然我可以使用异常来处理那个场景我想有更好的方法来做到这一点

ale*_*cxe 7

.extract_first() 救援:

response.xpath('//*@id="bakery"]/span[2]/text()').extract_first()
Run Code Online (Sandbox Code Playgroud)

None如果没有匹配的元素,它将返回而不是异常.


Pir*_*ron 6

有一个新的 Scrapy 内置方法get()可以使用,而不是extract_first()返回一个字符串或None如果不存在元素。

response.xpath('//*@id="bakery"]/span[2]/text()').get()
Run Code Online (Sandbox Code Playgroud)