【问题标题】:Got comment tag between span text to extract with xpath在跨度文本之间获得注释标签以使用 xpath 提取
【发布时间】:2019-03-20 13:35:27
【问题描述】:

我可以从下面的 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 上的评论标签,但很奇怪。

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

【问题讨论】:

  • 试试"".join(product.xpath('./div/a/div/div/div/span/text()').extract())

标签: dom xpath web-scraping scrapy


【解决方案1】:

试试

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      相关资源
      最近更新 更多