lxml 使用 Python 语言编写的库,主要用于解析和提取 HTML 或者 XML 格式的数据。
from lxml import etree
lxml 库的一些相关类:
一、Element 类
创建一个节点对象,则可以通过构造函数直接创建。
root = etree.Element("root")
例子中,参数 root 表示节点的名称。
Element 类的相关操作,主要可分为三部分,分别是节点操作、节点属性的操作、节点内文本的操作。
① 节点操作:
要获取节点的名称,可以通过 tag 属性获取。
print(root.tag)
② 节点属性的操作:
在创建节点的同时,可以为节点增加属性。节点中的属性是以 key-value 的形式进行存储,类似于字典的存储方式。通过构造方法创建节点时,可以在该方法中以参数的形式设置属性,其中参数的名称表示属性的名称,参数的值表示为属性的值。
# 创建 root 节点,并为其添加属性
root = etree.Element("root", interesting="totally")
print(etree.tostring(root))
可以通过 set() 方法给已有的节点添加属性。在调用该方法时可以传入两个参数,其中第一个参数表示属性的名称,第二个参数表示属性的值。
# 在次给 root 节点添加 age 属性
root.set("age", "30")
print(etree.tostring(root))
tostring() 函数可以将元素序列化为 XML 树的编码字符串表示形式。
③ 节点内的操作:
可以通过 text、tail 属性或者 xpath() 方法来访问文本内容。
# 创建 root 节点
root = etree.Element("root")
# 给 root 节点添加文本
root.text = "Hello, yutuan"
print(root.text)
print(etree.tostring(root))
二、从字符串或文件中解析 XML
将 XML 文件解析为树结构,etree 模块中提供了以下几个函数:
从字符串中解析 XML 文档或片段,返回根节点。
从字符串常量中解析 XML 文档或片段,返回根节点。
从字符串常量中解析 HTML 文档或片段,返回根节点。
xml_data = "<root>data</root>"
# fromstring() 方法
root_one = etree.fromstring(xml_data)
print(root_one.tag)
print(etree.tostring(root_one))
# XML
root_two = etree.XML(xml_data)
print(root_two.tag)
print(etree.tostring(root_two))
# HTML() 方法,如果没有 <html> 和 <body> 标签,会自动补上
root_three = etree.HTML(xml_data)
print(root_three.tag)
print(etree.tostring(root_three))
还可以调用 parse() 函数从 XML文件中直接解析。
html = etree.parse('./hello.html')
result = etree.tostring(html, pretty_print=True)