Python lxml etree 标签解析完整指南
本文详细介绍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 标签内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













