python - xpath当兄弟不是元素时如何获取文本

标签 python xpath scrapy

我曾经有过这个表格;

<li>
    <span>name:</span>
    <p>Seca </p>
</li>

我使用这个 xpath 来获取 seca:

ul/li/span[normalize-space(text())='name:']/following-sibling::p[1]/text())

一切都运行良好。

现在我没有p标签。所以我只有这个:

<li>
    <span>name:</span>
    Seca
</li>

我应该对代码进行哪些编辑才能立即获取 seca

最佳答案

现在,“Seca”只是 li 元素的另一个子元素 - 因此是 span 元素的后续同级元素。使用

//ul/li/span[normalize-space(text())='name:']/following-sibling::text()

给你

[EMPTY LINE]
Seca
[EMPTY LINE]

您可能想要排除那些仅包含空格的行:

normalize-space(//ul/li/span[normalize-space(text())='name:']/following-sibling::text())

结果将是

Seca

如果您的实际输入包含更多文本节点,请不要忘记将 [1] 添加到表达式中。

<小时/>

请注意,如果实际上没有理由规范 span 的文本内容并仅考虑其直接子文本节点,则表达式可能会容易得多:

//ul/li[span='name:']/text()[2]

关于python - xpath当兄弟不是元素时如何获取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28401403/

相关文章:

python - 控制 Raspberry Pi 和 Python 上的 USB 网络摄像头照片捕获时间

python - 如何正确编写接收json数据的python cgi脚本?

python - 尝试将 6 个 fiddle 子图(使用 seaborn 制作)(格式为 3 行 2 列)导出到单页 PDF

XPath 从部分 ID 中查找完整的 HTML 元素 ID

c# - 带有命名空间前缀的 xml 的 XPath 表达式

c# - 搜索多个属性和元素的 XPath 是什么?

Python:将 'list' 的 url 发送到 scrapy 蜘蛛进行抓取时出现问题

python - Scrapy yield utf-8

python - 如何在不丢失重复值的情况下从两个列表创建字典?

python - 如何使用scrapy检查网站是否支持http、htts和www前缀