Xpath介绍以及语法

news2024/11/15 9:02:09

Xpath介绍

 XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。 XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。 起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。

Xpath语法

祖先节点:父节点的父节点,例如html为所有标签的祖先或父节点。

父节点:为当前节点的上一层节点元素。(直接相邻)

当前节点:当前节点可以有0-n个子节点的元素。

兄弟(同胞节点):跟当前节点同一个父节点的元素。

具体如图所示。

node_name选取此节点的所有子节点。例如为div或者为tr
/选取根节点。(如果字符串开始为/,即为从跟开始)
//从匹配选择的当前节点中选择文档中的节点。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。

1. 根据对应的层级关系去逐层寻找或者是跨层寻找元素(假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!)


element = response_etree.xpath('//div[@xxx="xxx"]')
# 在多个层级目录下去寻找div标签,//表示多个层级目录

element = response_etree.xpath('/div[@xxx="xxx"]') 
# 在当前层级目录下去寻找div标签,/表示在当前层级进行寻找

2.根据属性去定位元素


element = response_etree.xpath('//div[@class="xxxx"]') 
# 根据属性去获取元素

element = response_etree.xpath('//div[@id="xiaoming"]/div[7]//text()')
# 在整个html文本中去寻找id为xiaoming的div下的第7个div的所有层级的文本

3.根据位置定位去定位元素,起始序号为1。

element = response_etree.xpath('//div[7]') 
# 个根据属性去获取html根节点的第七个div元素

4.根据运算表达式去定位元素

常用的只有|(合并节点)

element = response_etree.xpath('//div[4|6]') 
# 个根据属性去获取html根节点的第4和第6个div元素

5. 如果不确定属性的话可以用通配符*代替,但一般不常用,因为有可能获取的元素不为我们想要的元素

*匹配任何元素节点。
@*匹配任何属性节点。
node()匹配任何类型的节点。

 具体例子如图所示。

element = response_etree.xpath('//*[@id="xxx"]') 
# 获取带有id="xxx"的任何标签,
element = response_etree.xpath('//div[@*="xxx"]') 
# 获取带有任何"xxx"属性的div标签

Xpath获取文本或属性

text = response_etree.xpath('//div//div//text()')
# text()会获取字符组成一个列表返回,
# //text()表示取当前节点及其子孙节点中的文本内容,/text为返回当前节点的文本内容
text  = response_etree.xpath('//div//div//string(.)')
# string(.)会把当前节点和所有的子孙节点中的文本全部提取出来,组合成一个字符串

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

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

相关文章

第8章 模式匹配

第8章 模式匹配 基本概念和用法 模式守卫 package chapter08object Test01_PatternMatchBase {def main(args: Array[String]): Unit {// 1. 基本定义语法val x 5val y x match {case 1 > "one"case 2 > "two"case 3 > "three"ca…

《Reinforcement Learning: An Introduction》第6章笔记

Chapter 6 Temporal-Difference Learning If one had to identify one idea as central and novel to reinforcement learning, it would undoubtedly be temporal-difference (TD) learning. 时序差分学习(temporal-difference (TD) learning)组合了Mon…

PID控制算法 – 0、PID原理

1、开局一张图 很多地方都觉得PID的控制结构示意图是这样的: 2、目标值(Setpoint)、输入值(Input)、误差(Error) 其实把上图那个输入改为目标值(Setpoint)更合适&#…

canvas详解08-基本动画

由于我们是用 JavaScript 去操控 canvas 对象,这样要实现一些交互动画也是相当容易的。在本章中,我们将看看如何做一些基本的动画。 可能最大的限制就是图像一旦绘制出来,它就是一直保持那样了。如果需要移动它,我们不得不对所有东西(包括之前的)进行重绘。重绘是相当费…

CoreMark 跑个分:OrangePi5 RK3588S

一、 Orange Pi 5 简介 Orange Pi 5 采用了瑞芯微 RK3588S 新一代八核 64 位处理器,具体为四核A76四核A55,采用了 8nm 工艺设计,主频最高可达 2.4GHz,集成 ARM Mali-G610 MP4 GPU,内嵌高性能 3D 和 2D 图像加速模块&am…

【python桌面应用设计】tkinter库 01. Tkinter程序设计思想和结构(保姆级代码注释)

目录 实现思路代码实战简单的基础结构示例稍微丰富一点的示例 总结 『python图形化GUI界面设计』分享tkinter库、PyQt5库、wxPython库等相关的新手入门教程,目标是编写python程序时可以给程序一个可视化界面。 欢迎关注 『python桌面应用设计』 系列,持续…

ubuntu18.04安装ORBSLAM2

最近倒腾了一下旧项目,发现之前的环境不知道抽了什么风,直接不能用了,好吧,索性从头装过。 一、第三方库 主要包括Pangolin 、 OpenCV 、 Eigen g2o 与 DBoW2在ORB-SLAM2里面自带可以不需要自己搞 # 更新apt库,更新软件列表 su…

七、c++学习(加餐3:深入分析类和对象(下))

我们把这篇《深入分析类和对象》分为两篇,就是为了简化一下大家学习的压力,现在我们接下来看下一篇。 C学习,b站直播视频 文章目录 7.1 对象操作7.1.1 对象拷贝7.1.1.1 无拷贝赋值运算符7.1.1.2 测试编译器会不会自动生成7.1.1.3 自己写拷贝…

【吃透网络安全】2023软考网络管理员考点网络安全(四)防火墙详解

涉及知识点 什么是防火墙?防火墙的概念及定义,防火墙的优缺点,软考网络管理员常考知识点,软考网络管理员网络安全,网络管理员考点汇总。 后面还有更多续篇希望大家能给个赞哈,这边提供个快捷入口&#xf…

Reactive 环境配置 遇到的问题记录

问题:Watchman: watchman--no-pretty get-sockname returned with exit code 1 ERROR: Unknown option --no-pretty 解决方案:运行ReactNative工程watchman运行错误 解决过程就是,我的watchman 没安装好,于是卸载,重新…

电子电气架构 —— OEM关于DTC具体实现相关见解

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 我们当前遇到的几乎所有的成长问题都可以归结道目光短浅、及时满足的天性上,不过在现代社会,用避难趋易和急于求成来指代他们更贴切。 本文主要讲…

Vivado使用技巧之外部编辑器配置

目录 一、前言 二、编辑器配置 2.1 环境变量添加 2.2 环境变量验证 2.3 Vivado设置 2.4 配置验证 2.5 解决Vivado配置失败问题 一、前言 Vivado自带的默认编辑器功能受限,不如第三方编辑器Eclipse,Notepad,Sublime功能强大。因此&…

Python基础篇(八):文件和os、shutil模块

文件和os、shutil模块 1. 文件1.1 打开文件1.2 写入文件1.3 读取文件内容1.4 关闭文件1.5 异常处理 2. os模块2.1 获取当前工作目录2. 创建目录2.3 重命名文件或目录2.4 删除文件2.5 执行系统命令 3. shutil模块3.1 复制文件3.2 移动文件3.3 复制目录(包括子目录和文…

【Linux】死锁(更新中)

文章目录 一. 什么是死锁二. 死锁产生的四个条件三. 避免死锁1. 死锁检测算法2. 银行家算法 结束语 一. 什么是死锁 死锁是指一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用的不会释放的资源,而处于一种永久等待的状态。 就像…

Elasticsearch是什么,如何学习Elasticsearch,整合SpringBoot

目录 一、是什么Elasticsearch 二、Elasticsearch,整合SpringBoot 三、Elasticsearch的优势和应用场景 一、是什么Elasticsearch Elasticsearch是一个开源的搜索引擎,它采用Java语言编写,使用Lucene作为核心搜索引擎,并在其基…

2.文本分析

目录 1. 词频统计--语料库的构建 1. 词频统计–语料库的构建 文本挖掘:将文本信息转换为可利用的知识。通常,对大量文件的归类,一般通过建立不同的文件夹,来保存不同的文章。 同样的,将需要分析的【文本文件】读取到…

Shell - 01_shell的概述

一、shell 概述 1.shell 的两层含义: 既是一种应用程序,又是一种程序设计语言 a.作为应用程序: 交互式地解释、执行用户输入的命令,将用户的操作翻译成机器可以识别的语言,完成相应功能。称之为 shell 命令解析器。shell 是用户和…

机器学习对风险管理的重要性

✏️写作:个人博客,InfoQ,掘金,知乎,CSDN 📧公众号:进击的Matrix 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 机器学…

logback-spring.xml详解

本文来写说下logback-spring.xml相关的知识与概念 文章目录 概述configuration元素定义上下文名称定义变量appender组件 概述 对于xml日志文件的配置,大多数人第一次接触时有一种望而生畏的感觉,其实如果仔细分析,会发现核心的部分只有三个元…

【黄啊码】为什么程序员大都鄙视php?

“PHP 是世界上最好的语言”。。。“吗”?相信很多人跟我一样,都会在后边打个问号。这些年以来,“PHP 已死”、“PHP 行将消亡”之类的言论甚嚣尘上,由此看得出,很多开发人员讨厌 PHP。这又是为什么呢?PHP …