首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LXML XPath表达式仅返回第一个子节点,而浏览器则确认多个子节点

LXML XPath表达式仅返回第一个子节点,而浏览器则确认多个子节点
EN

Stack Overflow用户
提问于 2020-07-08 01:37:00
回答 1查看 61关注 0票数 1

我正在尝试使用Python lxml库来解析网页。在Firefox的开发人员视图中,页面的树形结构清晰地显示为:

但是,当我在Python中运行此查询时:

代码语言:javascript
运行
复制
>>> spellTree.xpath('//span[@id="ctl00_MainContent_DetailedOutput"]/child::node()')
[<Element h1 at 0x445a4b0>]`

它只将h1元素视为span的子元素,而不是其他spansh1之后的任何其他节点,即使树清楚地显示它们是子节点。

它确实标识了文档中存在的其他跨度:

代码语言:javascript
运行
复制
>>> spellTree.xpath('//span[@class="trait"]//child::node()')
[<Element a at 0x445a570>, 'Acid', <Element a at 0x445a5a0>, 'Attack', <Element a at 0x445a600>, 'Cantrip', <Element a at 0x445a5d0>, 'Evocation']

但是它不会注册它们是DetailedOutput跨度的子节点。是我的XPath错了,还是这是一个bug或异常?

编辑: Python 3.7.3,lxml 4.5.1。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-08 03:27:58

它可能是格式错误的html。

看起来//span[@id="ctl00_MainContent_DetailedOutput"]不是//span[@class="trait"]的孩子;相反,他们看起来像兄弟姐妹。这就是为什么//span[@id="ctl00_MainContent_DetailedOutput"]//child::node()只显示4个子节点。

这可能是原因:在span[@id="ctl00_MainContent_DetailedOutput"]标记中似乎有一个零散的</span>;这可能会导致html解析器认为span[@id="ctl00_MainContent_DetailedOutput"]是封闭的,从而导致将下一个跨度(//span[@id="ctl00_MainContent_DetailedOutput"])视为其兄弟而不是其子级。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62780903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档