在跨度文本之间获得注释标签以使用xpath提取

时间:2018-10-16 05:14:43

标签: dom xpath web-scraping scrapy

我能够从以下范围提取文本:

chrome inspect

使用此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上看到注释标签,也很奇怪。

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

2 个答案:

答案 0 :(得分:3)

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

不幸的是,尽管某些基于XPath的应用程序仅允许返回节点的表达式,但它们不允许返回字符串的表达式,如果Scrapy是这种情况,那么您将被束缚。

答案 1 :(得分:1)

尝试

import re
reviews = "".join(product.xpath('./div/a/div/div/div/span').extract())
reviews = re.findall(r"\d+", reviews)

我的意思是不使用/text(),仅获取原始HTML,然后通过正则表达式检索整数值