XPath 的基本概念

news2024/11/26 0:24:39

XPath 的基本概念

  • 引言
  • 1. XPath 的基本概念
    • 1.1 节点
    • 1.2 路径表达式
    • 1.3 轴
  • 2. XPath 的语法和使用方法
    • 2.1 标签定位
    • 2.2 属性定位
    • 2.3 文本定位
    • 2.4 谓语和运算符
  • 3. 示例演示
    • 3.1 示例 1 : Web 自动化测试
    • 3.2 示例 2 :数据提取和处理
    • 3.3 示例 3 :网页抓取和数据挖掘
  • 结论

引言

在处理 XMLHTML 文档时,准确定位和提取元素是一项关键任务。 XPath 是一种强大的查询语言,它为我们提供了一种直观且高度可定制的方式来解析和操作文档的结构和内容。本篇博客将深入探讨 XPath 的概述,介绍它的基本概念、语法和使用方法,并通过详细的解释和实例演示来展示它在精确定位和提取元素方面的优势。

😃😄 ❤️ ❤️ ❤️

1. XPath 的基本概念

XPathXML Path Language )是一种用于在 XMLHTML 文档中导航和定位元素的查询语言。它通过使用路径表达式来选择和定位特定的节点,使我们能够精确地选择所需的元素。

XPath 的基本概念包括:

1.1 节点

XPath 中,文档中的每个部分都被视为一个节点。节点可以是元素节点、属性节点、文本节点、注释节点等。元素节点是文档的主要组成部分,而属性节点用于描述元素的特性。

1.2 路径表达式

XPath 使用路径表达式来指定节点的位置。路径表达式由轴、节点名称、谓语和运算符组成。它可以指定元素的绝对路径(从根节点开始)或相对路径(相对于当前节点)。

1.3 轴

XPath 的轴定义了节点与当前节点之间的关系,相当于节点的运动路径。常用的轴包括子节点轴( child ::)、父节点轴( parent ::)、兄弟节点轴( sibling ::)等。轴与节点测试和谓语结合使用,用于指定要选择的节点类型。

2. XPath 的语法和使用方法

XPath 的语法基于路径表达式和运算符,通过使用不同的组件来选择和定位元素。以下是 XPath 的一些常用语法和使用方法:

2.1 标签定位

要通过标签名称定位元素,可以使用以下 XPath 表达式:

//tagname

其中, tagname 是要定位的元素的标签名。例如,要定位 HTML 文档中的所有 <a> 标签,可以使用以下 XPath 表达式:

//a

2.2 属性定位

要通过元素的属性定位元素,可以使用以下 XPath 表达式:

//tagname[@attribute='value']

其中, tagname 是要定位的元素的标签名, attribute 是元素的属性名, value 是属性的值。例如,要定位 <input> 标签中 type 属性值为 "text" 的元素,可以使用以下 XPath 表达式:

//input[@type='text']

2.3 文本定位

要通过元素的文本内容定位元素,可以使用以下 XPath 表达式:

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

其中, tagname 是要定位的元素的标签名, text 是元素的文本内容。例如,要定位按钮文本为 "Submit" 的元素,可以使用以下 XPath 表达式:

//button[text()='Submit']

2.4 谓语和运算符

XPath 的谓语提供了一种在定位过程中进一步筛选元素的机制。它允许使用各种条件表达式和运算符来指定特定的条件。

例如,要定位所有 <a> 标签中包含关键字 "click" 的元素,可以使用以下 XPath 表达式:

//a[contains(text(), 'click')]

这个表达式使用了 contains() 函数来检查 <a> 标签的文本内容是否包含 "click" 关键字。

3. 示例演示

为了更好地理解 XPath 的作用和优势,让我们通过几个示例来演示它的使用。

3.1 示例 1 : Web 自动化测试

假设我们正在进行一个登录页面的自动化测试。我们需要定位页面上的用户名输入框和登录按钮。

使用 XPath ,我们可以这样定位用户名输入框:

//input[@id='username']

使用 XPath ,我们可以这样定位登录按钮:

//button[@class='login-button']

这些 XPath 表达式准确地选择了所需的元素,为自动化测试提供了可靠的定位方法。

3.2 示例 2 :数据提取和处理

假设我们有一个 XML 文档,其中包含一些书籍的信息。我们希望从中提取所有书籍的标题和作者。

使用 XPath ,我们可以这样提取标题

//book/title/text()

使用 XPath ,我们可以这样提取作者:

//book/author/text()

这些 XPath 表达式精确地定位到所需的元素,使我们能够轻松地提取书籍的标题和作者信息。

3.3 示例 3 :网页抓取和数据挖掘

假设我们需要从一个新闻网站抓取新闻标题和链接。我们可以使用 XPath 来定位这些元素。

使用 XPath ,我们可以这样定位新闻标题

//h2[@class='news-title']/a/text()

使用 XPath ,我们可以这样定位新闻链接:

//h2[@class='news-title']/a/@href

这些 XPath 表达式准确地选择了新闻标题和链接,使我们能够轻松地抓取所需的信息。

结论

XPath 是一种强大而灵活的查询语言,用于在 XMLHTML 文档中定位和提取元素。它通过使用路径表达式和运算符,使我们能够精确地选择和定位所需的元素。

在本篇博客中,我们深入探讨了 XPath 的基本概念、语法和使用方法,并通过实例演示来展示它的强大功能。 XPathWeb 自动化测试、数据提取和网页抓取等任务中发挥着重要作用,帮助我们准确地定位和提取文档中的元素。

[ 专栏推荐 ]
😃 XPath 之旅:自动化爬虫入门探索》😄
❤️【简介】: XPath 基础教程适合初学者,旨在帮助学习者掌握 XPath 元素定位的基本原理和常用技巧。学习完这套课程,你将能够熟练使用 XPathHTMLXML 文档中定位元素,为后续的 Web 自动化测试、数据提取等工作打下坚实的基础。

在这里插入图片描述

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

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

相关文章

pdsh 2.29 安装

下载&#xff1a; wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/pdsh/pdsh-2.29.tar.bz2解包&#xff1a; tar jxvf pdsh-2.29.tar.bz2 cd pdsh-2.29/安装&#xff1a; ./configure --prefix/u01/isi/pdsh-2.29/ --with-timeout6…

Spark编程-共享变量(广播变量和累加器)

共享变量是什么 Spark中的两个重要抽象一个是RDD&#xff0c;另一个就是共享变量。 在默认情况下&#xff0c;当Spark在集群的多个不同节点的多个任务上并行运行一个函数时&#xff0c;它会把函数中涉及到的每个变量&#xff0c;在每个任务上都生成一个副本。 但是&…

基于STM32 ARM+FPGA伺服控制系统总体设计方案(一)

设计需求 一套完整的伺服控制方案包括了上位机、驱控一体控制器和功率板三者。操作人员 通过上位机发送各种不同指令&#xff0c;然后控制器解析指令后执行相应的伺服功能&#xff0c;其次控 制器将驱动信号传输至功率板驱动电机&#xff0c;最后控制器采集反馈信息进行闭环…

为你带来全新的UGC体验!

当我们开始向更多 UGC 开放元宇宙&#xff0c;你们将有机会发现我们社区在 The Sandbox 中创造的一些令人惊叹的体验。 需要从你们自己的体验中获得灵感&#xff0c;或者只是想玩一些新东西&#xff1f;以下是我们的一些建造者几个月来的工作成果——现在就可以玩&#xff01; …

JVM学习

文章目录 1 JVM与Java体系结构1.0 Java发展重大事件1.1 虚拟机和Java虚拟机1.3 JVM整体结构1.4 Java代码执行流程1.5 JVM架构模型1.6 JVM的生命周期1.7 JVM发展历程 2 类加载子系统2.1 ClassLoader2.2 用户自定义类加载器2.2.1 为什么需要自定义类加载器2.2.2 自定义类加载器的…

Kong 服务和路由的添加

管理服务 这里参考DB-less-Mode&#xff0c;因为使用的是yaml配置文件的形式&#xff0c;所以所有的相关配置只需要往初始化的kong.yml文件中添加就可以了&#xff0c;就像nginx的配置文件 DB-less-Mode 创建服务 vim /etc/kong/kong.yml services: - name: my-service #…

排查思路----CPU占用过高

1、top查看cpu占用情况 %Cpu(s): 29.4 us, 24.1 sy, 0.0 ni, 10.1 id, 20.4 wa, 0.0 hi, 16.0 si, 0.0 st 发现wa和si都比较高 2、查wa高的问题 iostat -x 1 10%util 接近 100%&#xff0c;说明产生的I/O请求太多&#xff0c;I/O系统已经满负荷&#xff0c;该磁盘存在瓶颈。…

数据库性能优化中的表结构优化

数据库性能优化中的表结构优化 在数据库应用中&#xff0c;表结构的设计直接影响着数据库的性能。合理的表结构设计可以提高数据库的查询效率和性能&#xff0c;而不合理的表结构设计则可能导致查询效率低下、数据冗余、数据不一致等问题。因此&#xff0c;表结构优化是数据库…

智慧园区如何搭乘数字孪生这列快车?

无论是2022年的火爆的元宇宙还是今年出圈的ChatGPT&#xff0c;都体现着数字技术嵌入社会生活是大趋势&#xff0c;数字孪生作为智能技术的一大亮点&#xff0c;它在智慧园区中的应用会是怎样呢&#xff1f;今天我们就来聊一聊&#xff01; &#xff08;全文3000字&#xff0c;…

Star CCM+ 202206 (17.04) 详细安装步骤

首先下载win系统的安装包 阿里云盘&#xff1a; https://www.aliyundrive.com/s/WFfyvFhGxwK 提取码: x57w 百度云盘&#xff1a;https://pan.baidu.com/s/1qKgxYf2DGURCTW0rga8Xkw?pwdeiqi 提取码&#xff1a;eiqi &#xff08;资源来自网络&#xff0c;仅供个人学习交流&…

电脑提示找不到MSVCR120.dll 简单解决方法,亲测有效!

msvcr120.dll是windows系统的一部分&#xff0c;它是Windows操作系统中的一个动态链接库文件。该文件包含了一些在运行使用了C语言编写的程序时所需的函数和资源。当系统无法找到或加载msvcr120.dll文件时&#xff0c;会导致相关程序无法正常运行。 msvcr120.dll文件它提供了一…

25个高级SQL查询-基于特定排序标准对行进行排序

本专栏中的许多示例将基于以下员工表(employee)。只有少数例子将以其他表格为基础;在这些情况下,表格将与示例一起进行说明。 一、RANK 函数 RANK()函数是SQL中的窗口函数之一。窗口函数查看部分数据并计算该部分的结果。 RANK()函数根据提供的列为每一行指定一个等级…

C语言自定义类型详解(保姆级教学)

目录 1.结构体 1.1结构体的介绍 1.2结构体的声明 1.3特殊声明&#xff08;匿名结构体类型&#xff09; 1.4结构体自引用 1.5结构体变量的定义和初始化 1.6结构体内存对齐 1.7修改默认对其数 2.位段 2.1什么是位段 2.2位段的内存分配 3.枚举 3.1枚举的定义 3.2枚举…

第G1周:生成对抗网络(GAN)入门

目录 一、课题背景和开发环境二、理论基础1.生成器2. 判别器3. 基本原理 三、前期准备工作1. 定义超参数2.下载数据3. 配置数据 四、定义模型1. 定义鉴别器2. 定义生成器 五、训练模型1. 创建实例2. 训练模型3. 保存模型 &#x1f368; 本文为&#x1f517;365天深度学习训练营…

检测到目标Content-Security-Policy响应头缺失

详细描述 HTTP 响应头Content-Security-Policy允许站点管理者控制用户代理能够为指定的页面加载哪些资源。除了少数例外情况&#xff0c;设置的政策主要涉及指定服务器的源和脚本结束点。 Content-Security-Policy响应头的缺失使得目标URL更易遭受跨站脚本攻击。 解决办法 …

浅谈炼钢厂能源计量管理系统的设计与应用

安科瑞 华楠 摘要: 从能源计量和管理的角度&#xff0c;论述了炼钢厂的能源计量管理系统的基本组成及功能。该系统的建立&#xff0c;将使炼钢厂能源介质的计量管理工作实现自动采集、瞬时监测、故障报警、能流监视&#xff1b;完成报表统计、离线输入、成本分析、预测参考等功…

【正点原子STM32连载】 第五十五章 录音机实验摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第五…

大学生用一周时间给麦当劳做了个App(Flutter版)

背景 有个大学生粉丝最近私信联系我&#xff0c;说基于我之前开源的多语言项目做了个仿麦当劳的项目&#xff0c;虽然只是个样子货&#xff0c;但是收获颇多&#xff0c;希望把自己写的代码开源出来供大家一起学习进度。这个小伙伴确实是非常积极上进&#xff0c;很多大学生&a…

Django admin管理工具TabularInline表格内联

详解 TabularInline 是 Django Admin 中的一个内联模型选项&#xff0c;用于在父模型的编辑页面中以表格形式显示关联的子模型对象。下面是对 TabularInline 的一些详解&#xff1a; 显示方式&#xff1a;TabularInline 以表格的形式显示子模型对象。每个子模型对象将以一行的…

12.0、Java_IO流 - 字节数组输入输出流

12.0、Java_IO流 - 字节数组输入输出流 字节数组流&#xff1a; ByteArrayInputStream 和 byteArrayOutputStream 经常用在需要流和数组之间转化的情况&#xff1b; 字节数组输入流&#xff1a; 说白了&#xff0c;FileInputStream 是把文件当做数据源&#xff1b;ByteArrayInp…