dom - 在跨度文本之间获得注释标签以使用 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 上的评论标签,也很奇怪。
如何绕过评论标签(如果呈现)并获得结果?
解决方案
这就是为什么最好避免使用 text() 来获取文本节点,而是使用 string() 来获取包含元素的字符串值,这会连接所有跳过注释的文本节点。
不幸的是,尽管一些基于 XPath 的应用程序只允许返回节点的表达式,但它们不允许返回字符串的表达式,如果使用 Scrapy 就是这种情况,那么你就完蛋了。
推荐阅读
- c++ - g ++宏连接与c ++宏连接
- python - 如何使用 Word2Vec 解决 Tensorflow 中的分类问题
- terraform - 将 tfvars 传递给 tf 文件的问题
- vb.net - 如何使用 VB.net 通过循环快速更新 MySQL 表
- kubernetes - 我应该在 OpenShift 中使用 certmanager.k8s.io 或 certmanager.io 哪个?
- javascript - 鼠标单击不适用于 google.maps.places.Autocomplete
- css - 媒体查询上的 CSS 网格布局更新
- .net - EF中如何拦截延迟加载相关实体
- docker - 不再支持 Google Cloud Run UDP 端口?
- c++-cli - 与类型同名的属性 - 我可以摆脱显式命名空间吗?