我能够从以下范围提取文本:
使用此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上看到注释标签,也很奇怪。
如何绕过评论标签(如果呈现)并获得结果?
答案 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,然后通过正则表达式检索整数值