[Xpath] Xpath基础知识

news2025/1/11 18:31:09

1.Xpath(XML Path Language)介绍

Xpath用于在HTML文档中通过元素(HTML标签)和属性(HTML标签的属性)进行数据定位

Xpath的优势:灵活且稳定

HTML树状结构

HTML的结构是树形结构,HTML是根节点,所有的其他元素节点都是从根节点发出的,其他元素都是这棵树上的节点Node,每个节点还可能有属性和文本

所有的HTML标签都有很强的层级关系,正是基于这种层级关系,Xpath语法能够选择出我们想要的数据

节点之间的关系

父节点(Parent):html 是 body 和 head 节点的父节点

子节点(Child):head 和 body 是 html 的子节点

兄弟节点(Sibling):拥有相同的父节点,head 和 body 就是兄弟节点,title 和 div 不是兄弟节点,因为他们不是同一个父节点

祖先节点(Ancestor):body 是 form 的祖先节点

后代节点(Descendant):form 是 html 的后代节点

Xpath中的绝对路径与相对路径

Xpath中的绝对路径从HTML根节点开始算,相对路径从任意节点开始

我们可以通过开发者工具,拷贝Xpath的绝对路径和相对路径

1.1 Xpath基础语法

表达式描述
/从根节点开始选取
//从任意节点开始选取
.选取当前节点
..选取当前节点的父节点
@选取属性或者根据属性选取
*通配符,表示任意节点或任意属性

示例

1.如果想选择HTML文档中所有的<p>标签,使用的Xpath表达式://p

2.如果想选择拥有href属性的所有<a>标签,使用的Xpath表达式://a[@href]

3.如果想选择文本内容等于"Hello"的所有元素,使用的Xpath表达式://*[test()='Hello']

4.如果想选择所有<ul>标签的直接<li>子元素,使用的Xpath表达式://ul/li

元素属性定位

① 根据属性名定位元素

定位具有特定属性名的元素:

//*[@attribute_name]

示例://*[@class] 会匹配所有具有 "class" 属性的元素

② 根据属性名和属性值定位元素

定位具有特定属性名和属性值的元素:

//*[@attribute_name='value']

示例://*[@id='myElement'] 会匹配 id 属性值为 "myElement" 的元素

③ 根据部分属性值定位元素

定位具有属性值包含特定文本的元素:

//*[contains(@attribute_name,'value')]

示例://*[contains(@class,'active')] 会匹配 class 属性值包含 "active" 的元素

④ 根据多个属性进行定位

定位具有多个属性及其对应值的元素:

//*[@attribute_name_1='value_1' and @attribute_name_2='value_2']

示例://*[@class='active' and @data-type='button'] 会匹配同时具有 class 属性值为"active" 和 data-type 属性值为 "button" 的元素 

层级属性结合定位

① 定位父元素下的子元素

通过指定父元素和子元素的标签名来定位元素:

//父元素名/子元素名

 定位特定属性的父元素下的子元素

通过指定父元素的属性和属性值,再结合子元素的标签名来定位元素

//父元素名[@属性名='属性值']/子元素名

示例://div[@class='container']/p 会匹配 class 属性为 "container" 的<div>元素下的所有<p>元素

③ 定位特定属性的父元素下的特定属性的子元素

通过指定父元素和子元素的属性条件来定位元素

//父元素名[@属性名1='属性值1']/子元素名[@属性名2='属性值2']

示例://ul[@id='menu']/li[@class='active'] 会匹配 id 属性为 "menu" 的<ul>元素下的class 属性为 "active" 的所有<li>元素 

使用谓语定位

① 定位符合特定索引的元素

通过位置索引来定位元素(索引值从1开始)

//tagname[position()]

示例://ul/li[position() = 3] 可以匹配位于<ul>下的第三个<li>元素

② 定位满足特定属性条件的元素

通过属性条件来定位元素

//tagname[@attribute='value']

示例://input[@type='text'] 可以匹配所有type属性值为"text" 的<input>元素 

③ 结合多个条件定位元素

使用逻辑运算符and结合多个属性条件来定位元素

示例://a[@class='active' and @href='/home'] 可以匹配同时满足class属性值为 "active" 和href属性值为 "/home" 的<a>元素

④ 通过文本内容定位元素

通过文本内容来定位元素

//tagname[text()='value']

示例://h1[text()='Welcome'] 可以匹配文本内容为 "Welcome" 的<h1>元素

使用逻辑运算符定位

① 使用 and 运算符

通过结合多个属性条件,使用and运算符定位元素

//tagname[@attribute1='value1' and @attribute2='value2']

示例://input[@type='text' and @name='username'] 可以匹配type属性为"text"且name属性为"username"的<input>元素

② 使用 or 运算符

通过结合多个属性条件,使用or运算符定位元素

//tagname[@attribute1='value1' or @attribute2='value2']

示例://a[@class='active' or @class='highlight'] 可以匹配class属性为"active"或"class"属性为"highlight"的<a>元素

③ 使用 not 运算符

使用not运算符否定一个属性条件,定位不满足该条件的元素

//tagname[not(@attribute='value')]

示例://div[not(@class='header')] 可以匹配class属性不为"header"的<div>元素 

使用文本定位

① 定位文本内容相等的元素

匹配文本内容与指定值相等的元素

//tagname[text()='value']

示例://a[text()='Login'] 可以匹配文本为"Login"的所有<a>元素

② 定位包含指定文本内容的元素

匹配包含指定值的文本内容的元素

//tagname[contains(text(), 'value')]

示例://p[contains(text(), 'Lorem ipsum')] 可以匹配包含"Lorem ipsum"文本的所有<p>元素

③ 根据包含特定关键词的文本内容定位元素

匹配文本内容中包含特定关键词的元素

//tagname[contains(text(), 'keyword')]

示例://h2[contains(text(), 'Contact')] 可以匹配文本内容中包含"Contact"关键词的<h2>元素

使用函数定位

函数说明举例
contains选取属性或者文本包含某些字符//div[contains(@id, 'data')] 选取 id 属性包含 data 的 div 元素
starts-with选取属性或者文本以某些字符开头//div[starts-with(@id, 'data')] 选取 id 属性以 data 开头的 div 元素
ends-with选取属性或者文本以某些字符结尾//div[ends-with(@id, 'require')] 选取 id 属性以 require 结尾的 div 元素

1.2 Xpath语法验证

在开发者工具的 Elements 中按Ctrl + F,在搜索框中输入 Xpath

1.3 lxml的基本使用

# 导入模块
from lxml import etree
# html源代码
web_data = """
        <div>
            <ul>
                 <li class="item-0"><a href="link1.html">first item</a></li>
                 <li class="item-1"><a href="link2.html">second item</a></li>
                 <li class="item-inactive"><a href="link3.html">third item</a></li>
                 <li class="item-1"><a href="link4.html">fourth item</a></li>
                 <li class="item-0"><a href="link5.html">fifth item</a>
             </ul>
         </div>
        """
# 将html转成xml文件
element = etree.HTML(web_data)

# 获取li标签下面的a标签的href
links = element.xpath('//ul/li/a/@href')
print(links)  # ['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']

# 获取li标签下面的a标签的文本数据
result = element.xpath('//ul/li/a/text()')
print(result)  # ['first item', 'second item', 'third item', 'fourth item', 'fifth item']

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

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

相关文章

Adobe After Effects的插件--------CC Particle World

CC Particle World是一个粒子效果器,用于在三维空间中生成和模拟各种粒子系统,包括火焰、雨、雪、爆炸、烟雾等等。它会自动随时间变化发射粒子。 本文部分参照 https://www.163.com/dy/article/IEJVDN760536FE6V.html 使用条件 使用该插件的图层需是2D图层。 我们新建一个…

图像生成技术飞速发展,个人化艺术创造还有多远?

图像生成技术飞速发展&#xff0c;个人化艺术创造还有多远&#xff1f; 通义万相文本绘图与人像美化希望图像生成类应用具备哪些功能通义万相改进建议 在当今这个创意与科技交织的时代&#xff0c;图像生成技术正以前所未有的速度重塑视觉艺术的边界。不管你是否有艺术细胞&…

递推,CF 353D - Queue

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 353D - Queue 二、解题报告 1、思路分析 手玩一下&#xff0c;我们发现相…

数据结构 - 线性表

0.线性表 1.定义 线性表就是零个或多个相同数据元素的有限序列。 2.线性表的存储结构 ①.顺序结构 ②.链式结构 3.线性表的表示方法 例如&#xff1a; 一.线性表的基本运算 二.线性表的复杂运算 1.线性表的合并运算 2.线性表的去重运算 三.顺序表 1.定义 顺序表&#xff0c;就…

Tensorflow2 如何扩展现有数据集(缩放、随机旋转、水平翻转、平移等),从而提高模型的准确率 -- Tensorflow自学笔记14

实际生活中的数据集&#xff0c;往往不是标准的数据&#xff0c;而是有倾斜角度、有旋转、有偏移的数据&#xff0c;为了提高数据集的真实性&#xff0c;提高模型预测的准确率&#xff0c;可以用ImageDataGenerator函数来扩展数据集 import tensorflow as tffrom tensorflow.k…

单机部署Redis集群

文章目录 Redis集群1.单机安装Redis2.Redis主从集群2.1.集群结构2.2.准备实例和配置2.3.启动2.4.开启主从关系2.5.测试 3.搭建哨兵集群3.1.集群结构3.2.准备实例和配置3.3.启动3.4.测试 4.搭建分片集群4.1.集群结构4.2.准备实例和配置4.3.启动4.4.创建集群4.5.测试 Redis集群 …

[数据集][目标检测]井盖丢失未盖破损检测数据集VOC+YOLO格式2890张5类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2890 标注数量(xml文件个数)&#xff1a;2890 标注数量(txt文件个数)&#xff1a;2890 标注…

基于人工智能的聊天情感分析系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 情感分析是一种自然语言处理任务&#xff0c;旨在识别文本中的情感&#xff0c;如“积极”、“消极”或“中立”。在聊天应用中&#…

Unity制作更换字体的插件

目录 1.前置知识 1.1 EditorWindow 1&#xff09;目的 2&#xff09;使用方式 1.2 OnGUI() 1&#xff09;目的 2&#xff09;使用方式 1.3 AssetDatabase 1&#xff09;目的 2&#xff09;使用方式 1.4 PrefabUtility 1&#xff09;目的 2&#xff09;使用方式 2…

永远学习:为什么人工智能难以适应新挑战

理解深度学习的局限性并追求真正的持续适应 欢迎来到雲闪世界。 “智者适应环境&#xff0c;正如水适应水瓶。”——中国谚语 “适应或灭亡&#xff0c;现在和以往一样&#xff0c;是大自然的必然法则。”——赫伯特乔治威尔斯 近年来&#xff0c;人工智能取得了长足的进步。所…

Android的logcat日志详解

Android log系统 logcat介绍 logcat是android中的一个命令行工具&#xff0c;可以用于得到程序的log信息。下面介绍 adb logcat中的详细参数命令以及如何才能高效的打印日志&#xff0c;或把日志保存到我们指定的位置。 可以输入 adb logcat --help&#xff0c;查看一下一些简…

Xinstall助力App全渠道统计,参数传递下载提升用户体验!

在移动互联网时代&#xff0c;App已成为我们日常生活中不可或缺的一部分。然而&#xff0c;对于App开发者来说&#xff0c;如何有效地推广和运营自己的应用&#xff0c;却是一个不小的挑战。尤其是在面对众多渠道、复杂的数据统计和用户需求多样化的情况下&#xff0c;如何精准…

【ffmpeg】转换音频格式

在音频文件所在目录启动终端输入以下 ffmpeg -y -i original.aac target.mp3-y 如果输出文件已经存在&#xff0c;则覆盖它而不询问。 执行完毕后在当前文件夹目录下生成目标文件

项目9-网页聊天室9(测试报告)

1.项目背景 本项目采用 SSM框架结合 Websocket 技术构建。用户通过简单的注册和登录即可进入聊天室&#xff0c;与其他在线用户实时交 流。系统支持文字消息的快速发送和接收、消息实时推送&#xff0c;确保交流的及时性和流畅性。SSM 框架为项目提供了稳定的架构和高效的 数据…

学习笔记--MybatisPlus

官网&#xff1a;MyBatis-Plus &#x1f680; 为简化开发而生 快速入门 入门案例 引入MybatisPlus的起步依赖 定义Mapper 问题&#xff1a; MybatisPlus中Invalid bound statement (not found): com.itheima.mp.mapper.UserMapper.insert 一定要指定实体类&#xff01;&am…

ASTER 地表动能温度 (AST_08) 是利用 8 至 12 µm 光谱范围内的五个热红外波段

ASTER L2 Surface Temperature V00 简介 ASTER 地表动能温度 (AST_08) 是利用 8 至 12 m 光谱范围内的五个热红外波段&#xff08;白天或夜间获取&#xff09;生成的 (https://lpdaac.usgs.gov/documents/996/ASTER_Earthdata_Search_Order_Instructions.pdf)。 它只包含陆地…

Slideflow:数字病理学中的深度学习与全切片可视化工具库|文献精析·24-09-02

小罗碎碎念 群里今天有人提问Histolab相关的问题&#xff0c;作者在交流的过程中谈到了Slideflow&#xff0c;恰好我没有看过这篇文章&#xff0c;所以便有了这期推文。 作者角色作者姓名单位名称&#xff08;英文&#xff09;单位名称&#xff08;中文&#xff09;第一作者Jam…

性能工具之 JProfiler 简单登录案例分析实战

文章目录 一、前言二、准备工作三、使用JProfile定位问题四、登陆案例分析四、总结 一、前言 JProfiler是一款 Java的性能监控工具。可以查看当前应用的对象、对象引用、内存、CPU使用情况、线程、线程运行情况&#xff08;阻塞、等待等&#xff09;&#xff0c;同时可以查找应…

66、脑机接口产业联盟天津第一次全体大会参会分享

我注意到脑机联盟网上搜不到第一次和第二次大会的有关资料&#xff0c;这是非常遗憾的&#xff0c;所以我根据自己参会的记录&#xff0c;写成文章&#xff0c;与各位同学分享&#xff0c;此课件我也做成了公开课讲解&#xff0c;连接在我的Github。写这些&#xff0c;也算是为…

uAI - AI Assistant 人工智能辅助助手插件

uAI助手支持GPT 3.5 Turbo、GPT 3.5 Turbo16K、GPT 4-8k和GPT 4 Turbo-128k 什么是uAI助理? uAI Assistant是Unity游戏引擎的强大扩展,它使用GPT AI帮助游戏开发人员轻松创建专业代码和引人入胜的游戏内容。 你需要一个OpenAI密钥才能使用uAI助手!阅读我们的文档以获取更多说…