You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用lxml.etree XPath解析HTML无法获取全部文本的问题求助

使用lxml解析含混合子标签的HTML时XPath无法获取全部文本

当使用lxml.etree解析HTML时,若目标标签包含不同类型的子标签(如示例中的<h3>下同时存在<span>和<p>),使用//text() XPath表达式无法获取到所有子元素的文本内容。

复现示例(含<p>标签的情况)

content = """
    <h3 id="author">
        <span>
            <a target="_blank">zhang</a>
        </span>
        <span>
            <a target="_blank">wang</a>
        </span>
        <p class="email">1234567@qq.com</p>
        <span>
            <a target="_blank">li</a>
        </span>
        <span>
            <a target="_blank">lin</a>
        </span>
    </h3>
"""

from lxml import etree
html_tree = etree.HTML(content)
print(html_tree.xpath('//h3[@id="author"]//text()'))

执行结果:

['\n        ',
 '\n            ',
 'zhang',
 '\n        ',
 '\n        ',
 '\n            ',
 'wang',
 '\n        ',
 '\n        ']

结果中缺失了"li"和"lin"两段文本。

复现示例(删除<p>标签的情况)

content = """
    <h3 id="author">
        <span>
            <a target="_blank">zhang</a>
        </span>
        <span>
            <a target="_blank">wang</a>
        </span>
        <span>
            <a target="_blank">li</a>
        </span>
        <span>
            <a target="_blank">lin</a>
        </span>
    </h3>
"""

from lxml import etree
html_tree = etree.HTML(content)
print(html_tree.xpath('//h3[@id="author"]//text()'))

执行结果:

['\n        ',
 '\n            ',
 'zhang',
 '\n        ',
 '\n        ',
 '\n            ',
 'wang',
 '\n        ',
 '\n        ',
 '\n            ',
 'li',
 '\n        ',
 '\n        ',
 '\n            ',
 'lin',
 '\n        ',
 '\n    ']

此时所有文本内容都能被正常获取。

环境信息

  • Python 3.6.2
  • lxml 3.8.0

内容的提问来源于stack exchange,提问作者yie1d

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:54:38