首页 > 解决方案 > 在跨度文本之间获得注释标签以使用 xpath 提取

问题描述

我可以从下面的 span 中提取文本:

铬检查

使用这个 xpath:

'./div/a/div/div/div/span/text()'

结果:

(12)

但奇怪的是,有时服务器会在两者之间放置评论标签,所以我无法获得预期的结果,

review = product.xpath('./div/a/div/div/div/span/text()').extract_first()
In [1]: review
Out[2]: '('

review = product.xpath('./div/a/div/div/div/span').extract_first()

In [3]: review
Out[4]: '<span class="_2wY6y7fV">(<!-- -->12<!-- -->)</span>'

即使我没有在第一张图片中看到 chrome DevTools 上的评论标签,也很奇怪。

如何绕过评论标签(如果呈现)并获得结果?

标签: domxpathweb-scrapingscrapy

解决方案


这就是为什么最好避免使用 text() 来获取文本节点,而是使用 string() 来获取包含元素的字符串值,这会连接所有跳过注释的文本节点。

不幸的是,尽管一些基于 XPath 的应用程序只允许返回节点的表达式,但它们不允许返回字符串的表达式,如果使用 Scrapy 就是这种情况,那么你就完蛋了。


推荐阅读