前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python-数据解析-lxml库-上

Python-数据解析-lxml库-上

作者头像
小团子
发布2019-07-18 15:11:30
9490
发布2019-07-18 15:11:30
举报
文章被收录于专栏:数据云团数据云团

lxml 使用 Python 语言编写的库,主要用于解析和提取 HTML 或者 XML 格式的数据。

代码语言:javascript
复制
from lxml import etree

lxml 库的一些相关类:

  • Element 类:XML 的节点。
  • ElementTree 类:一个完整的 XML 文档树。
  • ElementPath 类:用于搜索和定位节点。

一、Element 类

创建一个节点对象,则可以通过构造函数直接创建。

代码语言:javascript
复制
root = etree.Element("root")

例子中,参数 root 表示节点的名称。

Element 类的相关操作,主要可分为三部分,分别是节点操作、节点属性的操作、节点内文本的操作。

① 节点操作:

要获取节点的名称,可以通过 tag 属性获取。

代码语言:javascript
复制
print(root.tag)

② 节点属性的操作:

在创建节点的同时,可以为节点增加属性。节点中的属性是以 key-value 的形式进行存储,类似于字典的存储方式。通过构造方法创建节点时,可以在该方法中以参数的形式设置属性,其中参数的名称表示属性的名称,参数的值表示为属性的值。

代码语言:javascript
复制
# 创建 root 节点,并为其添加属性
root = etree.Element("root", interesting="totally")
print(etree.tostring(root))

可以通过 set() 方法给已有的节点添加属性。在调用该方法时可以传入两个参数,其中第一个参数表示属性的名称,第二个参数表示属性的值。

代码语言:javascript
复制
# 在次给 root 节点添加 age 属性
root.set("age", "30")
print(etree.tostring(root))

tostring() 函数可以将元素序列化为 XML 树的编码字符串表示形式。

③ 节点内的操作:

可以通过 text、tail 属性或者 xpath() 方法来访问文本内容。

代码语言:javascript
复制
# 创建 root 节点
root = etree.Element("root")
# 给 root 节点添加文本
root.text = "Hello, yutuan"
print(root.text)
print(etree.tostring(root))

二、从字符串或文件中解析 XML

将 XML 文件解析为树结构,etree 模块中提供了以下几个函数:

  • fromsrting() 函数

从字符串中解析 XML 文档或片段,返回根节点。

  • XML() 函数

从字符串常量中解析 XML 文档或片段,返回根节点。

  • HTML() 函数

从字符串常量中解析 HTML 文档或片段,返回根节点。

代码语言:javascript
复制
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文件中直接解析。

代码语言:javascript
复制
html = etree.parse('./hello.html')
result = etree.tostring(html, pretty_print=True)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档