Python lxml etree 标签解析完整指南

一只小鹿
一只小鹿
发布时间:2026-10-15| 5人浏览过
原创

本文详细介绍Python中lxml库的etree模块,涵盖从安装到高级解析的全流程。内容包含创建与操作子节点、管理属性、设置文本、处理XML与HTML解析以及使用XPath定位元素,帮助开发者高效进行标签解析。

使用pip命令安装lxml库,执行安装指令如下:

pip install lxml

导入lxml的etree模块,并初始化一个根节点,代码如下:

from lxml import etree

root = etree.Element('root')

在根节点下创建子节点span,具体实现如下:

from lxml import etree

root = etree.Element('root')
span = etree.SubElement(root, 'span')

从根节点中移除指定的子节点span,示例代码为:

from lxml import etree

root = etree.Element('root')

span = etree.SubElement(root, 'span')
root.remove(span)

清空根节点下的所有子节点,使用clear方法,代码示例:

from lxml import etree

root = etree.Element('root')
root.clear()

对子节点进行多种操作,包括获取标签数量、通过索引查找、按位置插入新元素以及在尾部追加元素,具体操作如下:

from lxml import etree

root = etree.Element('root')

span = etree.SubElement(root, 'span')

# 获取标签数
len(root)
# 获取标签索引号,如果有多个相同标签的话,可以区分
root.index(span)
# 按位置插入
root.insert(0, etree.Element('p'))
# 尾部添加
root.append(etree.Element('strong'))

获取标签父节点的两种方法:

第一种方法是通过getparent()直接获取父节点并访问其tag属性;第二种方法是通过父节点列表索引获取子节点,再调用getparent()获取父节点tag,示例代码:

from lxml import etree

root = etree.Element('root')

span = etree.SubElement(root, 'span')

# 获取父节点方法一
span.getparent().tag
# 获取父节点方法二,用列表获取子节点,再获取父节点
root[0].getparent().tag

为根节点设置属性title,值为“这是一个root标签”,代码如下:

from lxml import etree

root = etree.Element('root')
root.set('title', '这是一个root标签')

获取属性的三种方法

第一种方法是通过get()方法获取指定属性值;第二种方法参考字典操作,使用keys()、values()和items()获取所有属性信息;第三种方法是直接访问attrib字典获取所有属性,示例代码:

from lxml import etree
root = etree.Element('root')
# 获取属性方法一
root.get('title')
# 获取属性方法二,参考字典的操作
root.keys(),root.values(),root.items()
# 获取属性方法三,直接拿到属性存放的字典
root.attrib

设置标签文本

通过text属性在标签内添加文本,通过tail属性在标签后追加文本,具体实现如下:

from lxml import etree

root = etree.Element('root')

# 标签内添加文本
root.text='i am autofelix'
# 标签后追加文本
root.tail = 'i am autofelix'

使用xpath方法提取文本内容,并获取其父节点的tag属性,示例代码:

from lxml import etree

root = etree.Element('root')

word = root.xpath('//text()')
word[0].getparent().tag

判断文本类型,通过is_text属性判断是否为text文本,通过is_tail属性判断是否为tail文本,示例代码:

from lxml import etree

root = etree.Element('root')

word = root.xpath('//text()')
# 是否是text文本
word.is_text
# 是否是tail文本
word.is_tail

使用fromstring方法解析字符串格式的XML,获取tag属性并转换为字符串输出,示例代码:

from lxml import etree

html = etree.fromstring('<root>autofelix</root>')
html.tag
etree.tostring(html)

使用XML方法解析XML字符串,获取tag属性并转换为字符串输出,示例代码:

from lxml import etree

html = etree.XML('<root>autofelix</root>')
html.tag
etree.tostring(html)

去除XML文件中的空行,通过设置XMLParser的remove_blank_text参数为True,示例代码:

from lxml import etree

# 去除xml文件里的空行
parser= etree.XMLParser(remove_blank_text=True)
root = etree.XML('<root> auto felix </root>', parser)
print etree.tostring(root)

HTML解析

使用HTML方法解析字符串,即使没有<html>和<body>标签,也会自动补全,示例代码:

from lxml import etree

html = etree.HTML('<root>autofelix</root>')
etree.tostring(html)

搜索和定位

from lxml import etree

root = etree.XML('<root><a class="uname">i am autofelix<b/><c/><b/></a></root>')
# findall操作返回列表
root.findall('a')[0].text
# find操作就相当与找到了这个元素节点,返回匹配到的第一个元素
root.find('.//a').text
# 配合列表解析
[ b.text for b in root.findall('.//a') ]
# 根据属性查询
root.findall('.//a[@class]')[0].tag

到此这篇关于python 中 lxml 的 etree 标签解析的文章就介绍到这了,更多相关python etree 标签内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。