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

lxml etree遍历无法打印标签文本值、无法获取完整标签及Xpath求助

问题原因

lxml 对 XML/HTML 节点的文本存储有特殊规则:直接位于元素开始标签之后、第一个子元素之前的文本会存为元素的text属性;位于元素闭合标签之后、同级下一个元素/父元素闭合标签之前的文本,会存为元素的tail属性。你示例中的Printable String是第二个<a>标签的tail,而非<p>标签的text,因此仅打印e.text无法获取到该内容。

实现方案

1. 匹配期望输出的修改代码

from bs4 import BeautifulSoup
from lxml import etree

doc = "<p><a></a><a></a>Printable String</p>"
soup = BeautifulSoup(doc, "lxml")
root = etree.fromstring(str(soup))

tree = etree.ElementTree(root)
for i, e in enumerate(root.iter()):
    print(e.text)
    # 存在tail属性时额外打印
    if e.tail and e.tail.strip():
        print(e.tail.strip())

运行后即可输出你预期的结果。

2. 打印元素完整标签

使用etree.tostring方法可以直接输出元素的完整标签内容:

for e in root.iter():
    # encoding设为unicode可直接返回字符串,不需要额外解码
    full_tag = etree.tostring(e, encoding="unicode").strip()
    print(full_tag)

3. 获取元素XPath路径

调用ElementTree实例的getpath方法即可直接获取当前元素的XPath:

tree = etree.ElementTree(root)
for e in root.iter():
    xpath = tree.getpath(e)
    print(xpath)

内容的提问来源于stack exchange,提问作者Andu Gundu Swami

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:54:05