打卡学习Python爬虫第五天|Xpath解析的使用

news2024/9/28 13:28:49

什么是Xpath?是在XML文档中搜索内容的一门语言,HTML可以看作是xml的一个子集。

目录

1、安装lxml模块

2、导入lxml中的etree子模块

3、Xpath使用方法

3.1.选择节点

3.2.选择属性

3.3.选择文本内容

3.4.使用通配符*过滤节点

3.5.使用中括号[]索引

3.6.使用相对查找

3.7.使用函数

4、全部示例代码


1、安装lxml模块

# PyCharm终端输入
pip install lxml

# 使用清华源
pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple

2、导入lxml中的etree子模块

from lxml import etree

etree.XML().xpath() 是Python中用于XML解析的库 lxml 中的一个函数。lxml 是一个高效的XML解析器。另外,可以使用etree.parse("文件名")读取文件进行解析。

具体来说:

  • etree 是 lxml 库中的一个模块,它提供了访问XML文档的接口。
  • XML() 是 etree 模块中的一个函数,用于解析XML字符串。
  • xpath() 是 etree 模块中的一个方法,用于执行XPath查询。

etree.XML().xpath() 的含义是将一个XML字符串解析为一个lxmletree对象,然后使用这个对象执行XPath查询。

3、Xpath使用方法

XPath表达式通常以 / 开头,/ 表示层级关系,第一个 / 是根节点。

XPath是一种用于在XML文档中定位元素的语言。可使用一系列的语法规则来指定哪些元素应该被选中。xpath() 方法接受一个XPath表达式作为参数,并返回一个包含匹配元素的列表。

若有以下xml文档内容:

xml = '''
<book>
    <id>10010</id>
    <name>蔬菜</name>
    <price>33</price>
    <author>
        <nick id="1">萝卜</nick>
        <nick id="2">豆腐</nick>
        <nick class="a">土豆</nick>
        <nick id="3">白菜</nick>
        <div>
            <nick>西红柿</nick>
        </div>
        <span>
            <nick>番茄</nick>
        </span>
    </author>
    <partner>
        <nick id="4">火锅</nick>
        <nick id="5">麻辣烫</nick>
    </partner>
</book>
'''
3.1.选择节点

 使用///来选择节点。

  • /book/author/nick:选择/book/author的直接子节点nick
  • /book/author//nick:选择/book/author的所有名为nick子节点,不论它们在文档中的位置。
# text()为获取文本内容

/book/author/nick/text()
/book/author//nick/text()

3.2.选择属性

使用 @来选择元素的属性,如nick节点中的id属性且值为1。

/book/author/nick[@id=1]/text()

 如果想要属性的值

# 得到第i个id的值
/book/author/nick[i]/@id

# 得到全部id的值
/book/author/nick/@id

3.3.选择文本内容

使用 text() 来选择节点的文本内

//book/name/text()

3.4.使用通配符*过滤节点

使用通配符 * 表示任意的节点。

/book/author/*/nick/text()

# 相当于*代替了div和span,也就是说author和span之间可以是任意字符
/book/author/div/nick/text()
/book/author/span/nick/text()

3.5.使用中括号[]索引

获取/book/author下众多nick中的第一个nick,最后一个nick[last()]

/book/author/nick[1]/text()

# 最后一个
/look/author/nick[last()]/text()

3.6.使用相对查找

先提取/book中每一个partner的信息,然后在partner中继续查找,./为当前节点,即partner节点

# 相对路径查询
result = tree.xpath("/book/partner")
for i in result:
    result1 = i.xpath("./nick/text()") #
    print(result1)

3.7.使用函数

函数可以用于计算或提取信息。

/book/author/nick[position()=2]/text()
# nick[position()=2]相当于nick[2]
/book/author/nick[2]/text()

count(//nick) # 获取nick节点的数量

4、全部示例代码

from lxml import etree
xml = '''
<book>
    <id>10010</id>
    <name>蔬菜</name>
    <price>33</price>
    <author>
        <nick id="1">萝卜</nick>
        <nick id="2">豆腐</nick>
        <nick class="a">土豆</nick>
        <nick id="3">白菜</nick>
        <div>
            <nick>西红柿</nick>
        </div>
        <span>
            <nick>番茄</nick>
        </span>
    </author>
    <partner>
        <nick id="4">火锅</nick>
        <nick id="5">麻辣烫</nick>
    </partner>
</book>
'''
tree = etree.XML(xml) # 解析xml
# result = tree.xpath("/book")  # 获取根节点
# result = tree.xpath("/book/name")  # 获取子节点name
# result = tree.xpath("/book/name/text()") # 获取子节点name的文本内容
# result = tree.xpath("/book/author/nick/text()")  # 获取author的子nick节点的文本内容
# result1 = tree.xpath("/book/author//nick/text()") # 获取author节点下名为的所有nick节点的文本内容
# result = tree.xpath("/book/author/nick[@id=1]/text()") # 获取id=1的nick节点的文本内容
# result = tree.xpath("/book/author/*/nick/text()") # 获取author节点下所有nick节点的文本内容
# result = tree.xpath("/book/author/nick[1]/text()") # 获取author节点下第一个nick节点的文本内容
# result = tree.xpath("/book/author/nick/@id") # 获取author节点下所有nick节点的id属性值

# 相对路径查询
# result = tree.xpath("/book/partner")
# for i in result:
#     result1 = i.xpath("./nick/text()") #
#     print(result1)

# result = tree.xpath("count(//nick)") # 获取nick节点的数量
result = tree.xpath("/book/author/nick[position()=2]/text()") # 获取author节点下第二个nick节点的文本内容
print(result)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

半个小时写一个自动发朋友圈的工具

最近一直在完善我的手控达人系统&#xff0c;解决了很多难题。白天没事时想思路&#xff0c;晚上写代码验证。这不昨天又加了一个发朋友圈功能。自动发朋友圈&#xff0c;点赞功能。 效果请看:【微信自动发朋友圈&#xff0c;一键发朋友圈&#xff0c;点赞&#xff0c;金币&…

鸿道Intewell操作系统国产ARM生态:芯驰D9(9360)

随着全球经济环境的变化和国家政策的推动&#xff0c;国产操作系统和芯片产业正在迅速发展&#xff0c;成为提升国家竞争力的关键因素。国产工业操作系统与国产芯片的发展对于推动国内工业的自主可控和技术创新具有重要意义。 鸿道Intewell操作系统国产ARM生态&#xff1a;芯驰…

【ACM稳定出版,高录用稳检索】第八届电子信息技术与计算机工程国际学术会议(EITCE 2024,10月18-20)

第八届电子信息技术与计算机工程国际学术会议&#xff08;EITCE 2024&#xff09;将于2024年10月18日至20日在中国海口举办。 本次会议旨在汇集全球电子信息技术与计算机工程领域的学者、科研专家及行业实践者&#xff0c;共同探讨该领域的最新研究成果、技术进展与学术动态。会…

工业排污检测算法实际算法应用算法价值算法源码、算法样本展示

工业排污检测算法识别是环境保护领域的一项重要技术手段&#xff0c;它结合了图像识别、声音识别、数据分析等多种先进技术&#xff0c;以实现对工业排污行为的全面监测和准确分析。以下是关于工业排污检测算法识别的详细阐述&#xff1a; 一、算法原理 工业排污检测算法通过…

YOLOv9改进策略【注意力机制篇】| 引入SimAM注意力模块(一个简单的,无参数的卷积神经网络注意模块)

一、本文介绍 本文记录的是基于SimAM注意力模块的YOLOv9目标检测方法研究。SimAM注意力模块通过优化能量函数来获得每个神经元的三维权重&#xff0c;而无需引入额外的参数或增加计算复杂度。若是有轻量化需求的小伙伴&#xff0c;无参的注意力模块也许是一个不错的选择。 文章…

MATLAB 手动实现体素中心点采样抽稀法(72)

. 往期文章回顾 MATLAB 自定义体素中心点采样抽稀法(72) 一、算法简介二、算法实现1.代码2.效果总结一、算法简介 下面是手动实现的体素采样法,用于对点云数据抽稀,减少点云数量,具体的方法就是建立空间三维体素,每个内部存在点云的体素,选择体素中心点保留,最终得到…

使用kafka改造分布式事务

文章目录 1、kafka确保消息不丢失&#xff1f;1.1、生产者端确保消息不丢失1.2、kafka服务端确保消息不丢失1.3、消费者确保正确无误的消费 2、生产者发送消息 KafkaService3、UserInfoServiceImpl -> login()4、service-account - > AccountListener.java 1、kafka确保消…

电磁炮设计

视频链接&#xff1a; 电磁炮视频 项目简介 这个项目电磁炮主要是&#xff0c;测试电磁炮原理部分的简易制作&#xff0c;对原理有初步认识&#xff0c;升压电路采用的是boost电路&#xff0c;IGBT作为开关管&#xff0c;电解电容作为储能元件。 项目功能 本设计是基于STM32F4…

Chapter 02 Vue指令(上)

欢迎大家订阅【Vue2Vue3】入门到实践 专栏&#xff0c;开启你的 Vue 学习之旅&#xff01; 文章目录 前言一、v-text指令二、v-html指令三、v-show指令四、v-if指令五、v-else指令六、v-else-if指令 前言 在 Vue.js 中&#xff0c;指令是带有 v- 前缀的特殊属性&#xff0c;不…

【大数据】数据仓库的定义、数据模型及其建设与设计

1. 数据仓库 1.1 定义 数据仓库不是数据的简单堆积&#xff0c;而是从大量的事务型数据库中抽取数据&#xff0c;并将其清理、转换为新的存储格式,即为决策目标把数据聚合在一种特殊的格式中。公认的数据仓库之父 W.H. Inmon 将其定义为&#xff1a;“数据仓库是支持管理决策…

【秋招笔试】8.19蔚来秋招-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

git submodule

文章目录 环境准备用法添加子模块添加b添加c提交总结 其它用户获取子模块其它总结 更新子模块内容方式1&#xff1a;独立更新其它 方式2&#xff1a;在主模块嵌套下更新总结 总结参考 写的有点乱&#xff0c;凑合理解一下吧。另外常用命令总结一下&#xff1a; git submodule …

开发者空间实践指导:基于华为云3大PaaS主流服务轻松实现文字转换语音

案例简介 开发者将在云主机中&#xff0c;基于CodeArts API设计语音合成接口&#xff0c;基于API Explorer调试接口&#xff0c;并利用CodeArts IDE实现数据流转换为音频。在此过程中&#xff0c;开发者可体验API设计、开发、调试等全生命周期&#xff0c;对华为云产品API体系…

vue文件打包后怎么运行

找到打包后的文件 并在此处打开cmd控制台 输入 npm run serve 按住" ctrl " 再点击网址及可访问。 ------------------------------

代码行数计数器

做了个记录代码函数的小程序&#xff0c;后缀名记得设置为.pyw&#xff0c;如果你装了python的话可以直接拿来用&#xff0c;免费自取。 功能说明&#xff1a; 1.记录总行数、当前行数、目标行数三个值 2.具有进度条功能 3.行数的多少能激发不同的反馈&#xff0c;如great&am…

基于分数Talbot效应的阵列光学涡旋产生matlab模拟与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于分数Talbot效应的阵列光学涡旋产生matlab模拟与仿真&#xff0c;分别测试正方形&#xff0c;旋转正方形以及六边形三种阵列形状下的光学涡旋。 2.测试软件版…

(论文研读)解决transform训练的不稳定性问题:SAMformer(时序预测)

论文链接&#xff1a;https://arxiv.org/abs/2402.10198 作者团队&#xff1a;华为诺亚方舟实验室&#xff08;华为巴黎研究中心&#xff09;&#xff0c;Laboratory of Informatics Paris Descartes (LIPADE) 巴黎笛卡尔大学&#xff08;第五大学&#xff09;信息学实验室 文…

【笔记篇】Davinci Configurator SomeIpXf模块

目录 1 简介1.1 架构概览2 功能描述2.1 特性2.2 初始化2.3 状态机2.4 主函数2.5 故障处理3 集成4 API描述5 配置1 简介 本文主要描述了AUTOSAR SomeIpXf模块的功能。 SomeIpXf主要用途是对数据进行SOME/IP格式的序列化和反序列化。 1.1 架构概览 SomeIpXf在AUTOSAR软件架构…

环绕音效是什么意思,电脑环绕音效怎么开

Boom 3D是一款专业的音效增强软件&#xff0c;它拥有先进的音效处理技术和丰富的音效设置选项&#xff0c;可以为用户打造出高度定制化的音频体验&#xff0c;Boom 3D还拥有简洁直观的界面&#xff0c;操作简单易懂&#xff0c;即使是音频技术的新手也能轻松上手。本篇文章就将…

Mybatis实现员工管理系统

文章目录 1.案例需求2.编程思路3.案例源码4.小结 1.案例需求 在上次做的父子模块的maven以及Ajax实现人工管理系统的基础上使用Mybatis实现员工管理系统的增删改查&#xff0c;具体运行效果如下&#xff1a; 2.编程思路 Mybatis框架的一般执行流程&#xff1a; 创建MyBati…