python中lxml库的使用简介

  

目录

1.ElementTree 类

2.Element 类

3.ElementTree 类或 Element 类的查找方法


      为方便开发人员在程序中使用 XPath 的路径表达式提取节点对应的内容, Python 提供了
第三方库 lxml 。开发人员通过 lxml 库可以轻松地对 HTML XML 文档中的目标节点进行定
位并提取。这里以 4.6.3 版本的 lxml 库为例进行介绍。
        在 lxml 库中,大多数有关解析网页数据的功能都封装到 etree 模块中, etree 模块包含了
两个比较重要的类,它们分别是 ElementTree 类和 Element 类,关于这两个类的相关内容的介
绍如下。

1.ElementTree 类

        ElementTree 类的对象可以理解为一个 HTML XML 文档的节点树。为方便开发者将
HTML XML 文档转换为 ElementTree 类的对象, etree 模块中提供了一个 parse() 函数。 parse()
函数的声明如下。
parse(source, parser=None, base_url=None)
上述函数中各参数的含义如下。
  •  source:必选参数,表示待解析的内容,该参数共支持 4 种类型的取值,它们分别是
打开的文件对象(确保以二进制模式打开)、类似文件的对象、字符串形式的文件名称、字符
串形式的 URL
  • parser:可选参数,表示解析器。若未指定解析器,则会使用默认的解析器;若希望
指定其他解析器,则可以通过 help(etree.XMLParser) 查看 lxml 支持的解析器。
  • base_url:可选参数,表示基础 URL
下面以 4.3.2 节中的 bookstore.xml 为例,演示如何根据该文档使用 parse() 函数创建
ElementTree 类的对象,示例代码如下。
from lxml import etree 
# 根据 bookstore.xml 文件创建 ElementTree 类的对象
ele_tree = etree.parse(r'bookstore.xml') 
print(type(ele_tree))
运行代码,输出如下结果。
<class 'lxml.etree._ElementTree'>
        此外,etree 模块还提供了 fromstring() 函数、 XML() 函数和 HTML() 函数。这 3 个函数也
可以解析 HTML XML 文档或片段,只不过在解析成功后返回根节点或者解析器目标返回
的结果。其中, fromstring() 函数和 XML() 函数具有相同的功能,都可以从字符串常量中解析
XML 文档或片段; HTML() 函数用于从字符串常量中解析 HTML 文档或片段,并能够自动补
全文档或片段中缺少的 <html> <body> 元素。
        例如,使用 fromstring() 函数解析 XML 片段,具体代码如下。
from lxml import etree 
xml_doc = ''' 
<bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book> <title lang="eng">Learning XML</title> <price>39.95</price> </book> 
</bookstore> 
''' 
# 从字符串 xml_doc 中解析 XML 片段
root_node = etree.fromstring(xml_doc) 
print(root_node)
运行代码,输出如下结果。
<Element bookstore at 0x33d7a00>
从输出结果可以看出,程序输出了一个 Element 类的对象,该对象是根节点 bookstore

2.Element 类

        Element 类的对象可以理解为 XML HTML 文档的节点。它与 Python 中的列表非常相
似,可以使用诸如 len() 方法、 append() 方法、 remove() 方法修改节点,也可以使用索引、切片
获取节点集中的子节点。
例如,使用索引或切片获取 root_node 对象中的子节点,具体代码如下。
print(root_node[:]) # 获取所有的子节点
print(root_node[0]) # 获取第 1 个子节点
print(root_node[1]) # 获取第 2 个子节点

运行代码,输出如下结果。

[<Element book at 0x34cae00>, <Element book at 0x34cae80>]
<Element book at 0x34cae00>
<Element book at 0x34cae00>

除此之外,Element 类还提供了一些获取节点的属性,关于这些属性及其说明如表 4-6 所示。

 

例如,获取 root_node 对象的名称,示例代码如下。

print(root_node.tag)

运行代码,输出如下结果。 

bookstore

3.ElementTree 类或 Element 类的查找方法

        ElementTree类或 Element 类中提供了 3 个常用的查找方法,它们分别是 find() 方法、 findall()
方法和 xpath() 方法。关于 find() 方法、 findall() 方法和 xpath() 方法的介绍如下。
find() 方法:从节点树的某个节点开始查找,返回匹配到的第一个子节点。
findall() 方法:从节点树的某个节点开始查找,以列表的形式返回匹配到的所有子节点。
xpath() 方法:从节点树的根节点或某个节点开始查找,以列表的形式返回匹配到的所
有子节点。
        使用上述 3 个方法都可以接收 XPath 的路径表达式,并在调用成功后返回查找到的最终
结果,不过, find() 方法和 findall() 方法只支持相对路径, xpath() 方法支持相对路径和绝对路径。
需要注意的是,若 find() 方法未找到匹配项,则会返回 None ;若 findall() 方法和 xpath() 方法未
找到匹配项,则会返回一个空列表。
        以 root_node 对象为例,分别使用以上 3 个方法查找第一个 price 节点的文本,示例代码
如下。
res1 = root_node.find('.//price').text
print(res1)
res2 = root_node.findall('.//price')[0].text
print(res2)
res3 = root_node.xpath('.//price')[0].text
print(res3)

运行代码,输出如下结果。

29.99
29.99
29.99

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/364139.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用obdumper对oceanbase进行备份,指定2881端口

1.安装obdumper &#xff08;1&#xff09;下载软件 OceanBase分布式数据库-海量数据 笔笔算数https://www.oceanbase.com/softwarecenter &#xff08;2&#xff09;安装软件 参考&#xff1a;https://www.oceanbase.com/docs/common-oceanbase-dumper-loader-100000000062…

qt实现打开pdf(阅读器)功能用什么库比较合适

关于这个问题&#xff0c;网上搜一下&#xff0c;可以看到非常多的相关博客和例子&#xff0c;可以先看看这个总结性的博客&#xff08;https://zhuanlan.zhihu.com/p/480973072&#xff09; 该博客讲得比较清楚了&#xff0c;这里我再补充一下吧&#xff08;qt官方也给出了一些…

MyBatis Plus条件构造器使用

1Wrapper&#xff1a; 条件构造抽象类&#xff0c;最顶端父类 1.1 AbstractWrapper&#xff1a; 用于查询条件封装&#xff0c;生成 sql 的 where 条件 1.2 QueryWrapper&#xff1a; Entity 对象封装操作类&#xff0c;不是用lambda语法 1.3 UpdateWrapper&#xff1a; Update…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-29残差网络ResNet

29残差网络ResNet import torch from torch import nn from torch.nn import functional as F import liliPytorch as lp import matplotlib.pyplot as plt# 定义一个继承自nn.Module的残差块类 class Residual(nn.Module):def __init__(self, input_channels, num_chan…

ROS2创建自定义接口

ROS2提供了四种通信方式&#xff1a; 话题-Topics 服务-Services 动作-Action 参数-Parameters 查看系统自定义接口命令 使用ros2 interface package sensor_msgs命令可以查看某一个接口包下所有的接口 除了参数之外&#xff0c;话题、服务和动作(Action)都支持自定义接口&am…

微服务实战系列之云原生

前言 话说博主的微服务实战系列从去年走到今天&#xff0c;已过去了半年多了。本系列&#xff0c;博主主要围绕微服务实践过程中的主要组件或工具展开介绍。其中基本覆盖了我们项目或产品研发过程中&#xff0c;经常使用的中间件或第三方工具。至此&#xff0c;该系列也该朝着…

LangChain真的好用吗?谈一下LangChain封装FAISS的一些坑

最近在做一个知识库问答项目&#xff0c;就是现在大模型浪潮下比较火的 RAG 应用。LangChain 可以说是 RAG 最受欢迎的工具&#xff0c;因此我首选 LangChain 来快速构建我的应用。坦白来讲 LangChain 本身一套对于组件的定义已经让我感觉很复杂&#xff0c;为什么采用 f-strin…

SM2258XT量产工具,SM2258XT开卡三星SSV4颗粒成功分享,SM2259XT量产参考教程,威刚ADATA SP580开卡记录

前两天拆了笔记本上的威刚ADATA SP580 240GB&#xff0c;准备做移动硬盘用&#xff0c;装入移动硬盘盒之后接入电脑&#xff0c;发现系统可认盘&#xff0c;SMART显示正常&#xff0c;Windows的磁盘管理能显示正确容量&#xff0c;但处于未初始化状态&#xff0c;且始终无法初始…

gin数据解析,绑定和渲染

一. 数据解析和绑定 1.1 Json数据解析和绑定 html文件&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0&quo…

数据脱敏学习

数据脱敏是一种保护敏感信息的方法&#xff0c;它通过修改或删除数据中的敏感部分&#xff0c;使得数据在保持一定可用性的同时&#xff0c;不再直接关联到个人隐私或重要信息。 自然人指可以直接或间接标识 直接标识&#xff1a;如姓名、身份证号码、家庭住址、电话号码、电…

Power BI可视化表格矩阵如何保持样式导出数据?

故事背景&#xff1a; 有朋友留言询问&#xff1a;自己从Power BI可视化矩阵表格中导出数据时&#xff0c;导出的表格样式会发生改变&#xff0c;需要线下再手动调整&#xff0c;重新进行透视组合成自己想要的格式。 有没有什么办法让表格导出来跟可视化一样&#xff1f; Po…

【proteus 51单片机入门】8*8led点阵

文章目录 前言如何点亮led点阵仿真图代码点亮led核心代码解析 爱心代码 滚动总结 前言 在嵌入式系统的开发中&#xff0c;LED点阵显示器是一种常见的显示设备&#xff0c;它可以用来显示各种图形和文字&#xff0c;为用户提供直观的信息反馈。本文将介绍如何使用Proteus软件和…

Element 页面滚动表头置顶

在开发后台管理系统时&#xff0c;表格是最常用的一个组件&#xff0c;为了看数据方便&#xff0c;时常需要固定表头。 如果页面基本只有一个表格区域&#xff0c;我们可以根据屏幕的高度动态的计算出一个值&#xff0c;给表格设定一个固定高度&#xff0c;这样表头就可以固定…

在 PMP 考试中,项目管理经验不足怎么办?

在项目管理的专业成长之路上&#xff0c;PMP认证如同一块里程碑&#xff0c;标志着从业者的专业水平达到了国际公认的标准。然而&#xff0c;对于那些项目管理经验尚浅的考生来说&#xff0c;这座里程碑似乎显得有些遥不可及。那么&#xff0c;在PMP考试准备中&#xff0c;项目…

冯雷老师:618大退货事件分析

近日冯雷老师受邀为某头部电商36名高管进行培训&#xff0c;其中聊到了今年618退货潮的问题。以下内容整理自冯雷老师的部分授课内容。 一、引言 随着电子商务的蓬勃发展&#xff0c;每年的618大促已成为消费者和商家共同关注的焦点。然而&#xff0c;在销售额不断攀升的同时…

DigiRL:让 AI 自己学会控制手机

类似于苹果此前发布的Ferret-UI 的安卓开源平替。主要用于在 Android 设备上识别 UI 和执行指令&#xff0c;不同的是它利用了离线到在线强化学习&#xff08;Offline-to-Online RL&#xff09;&#xff0c;能够快速适应应用更新或 UI 变化。

如何解决java程序CPU负载过高问题

1、介绍 在生产环境中&#xff0c;有时会遇到cpu占用过高且一直下不去的场景。这种情况可能会导致服务器宕机&#xff0c;进而中断对外服务&#xff0c;也会影响硬件寿命。 2、原因 1、Java代码存在因递归不当等原因导致的死循环的问题&#xff0c;推荐有条件的循环&#xf…

OpenAI禁止中国使用API,国内大模型市场何去何从

GPT-5 一年半后发布&#xff1f;对此你有何期待&#xff1f; 前言 前言&#xff1a; 近日&#xff0c;OpenAI宣布禁止中国用户使用其API&#xff0c;这一决策引起了国内大模型市场的广泛关注。面对这一挑战&#xff0c;国内大模型市场的发展路径和前景成为业界热议的焦点。本…

pytorch-01

加载mnist数据集 one-hot编码实现 import numpy as np import torch x_train np.load("../dataset/mnist/x_train.npy") # 从网站提前下载数据集&#xff0c;并解压缩 y_train_label np.load("../dataset/mnist/y_train_label.npy") x torch.tensor(y…

【小程序静态页面】猜拳游戏大转盘积分游戏小程序前端模板源码

猜拳游戏大转盘积分游戏小程序前端模板源码&#xff0c; 一共五个静态页面&#xff0c;首页、任务列表、大转盘和猜拳等五个页面。 主要是通过做任务来获取积分&#xff0c;积分可以兑换商品&#xff0c;也可用来玩游戏&#xff1b;通过玩游戏既可能获取奖品或积分也可能会消…