XPath高阶玩法:灵活使用Axes技巧+函数,爬虫效率翻倍!

XPath 轴(Axes) XPath 轴是 XPath 表达式中的一种重要概念,它定义了节点之间的关系和遍历方式。掌握 XPath 轴的使用方法,可以更精确地定位到所需的节点,从而提高 XML 和 HTML 文档的处理效率。 阅读详情

01 引言

上一期主要介绍了XPath的基本语法,以及常用的技巧,用于快速入门。但是使用的技巧中引入了轴(Axes)以及函数的概念,为了能够更加游刃有余的使用进阶技巧,我们完整的介绍一下XPath 的高阶玩法。

02 轴(Axes)

在 XPath 中,轴(Axes)是用来定位 XML 或 HTML 文档中节点与当前节点之间关系的关键概念,它是是 XPath 中用于定义方向和节点关系的一种机制。通过轴,您可以向上、向下、向左或向右查找节点。每个轴表示一个特定的方向,并能返回相对于当前节点的不同节点集合。

XPath 提供了多种轴,用于定位当前节点的父节点、子节点、兄弟节点、祖先节点等。

2.1 轴的枚举

轴名称含义
ancestor直译:祖先。选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self直接:祖先或自己。选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute直译:属性。选取当前节点的所有属性。
child直译:孩子。选取当前节点的所有子元素(不包含孙)。
descendant直译:后代。选取当前节点的所有后代元素(子、孙等)。
descendant-or-self直译:后代或自己。选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following直译:后面。选取文档中当前节点的结束标签之后的所有节点(包括子节点)。
following-sibling直译:后面的兄弟节点。选取当前节点之后的所有兄弟节点(不包括子节点)
namespace直译:名称空间。选取当前节点的所有命名空间节点。
parent直译:父亲。选取当前节点的父节点(最近的一个)。
preceding直译:前一个。选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling直译:前一个兄弟节点。选取当前节点之前的所有同级节点。
self直译:自身。选取当前节点。

用法:轴名称::节点名称

基础的语法只能按照层级一级一级的获取。而轴则可以帮助我们实现节点之间的跨越。

2.2 实战案例

实战之前我们定义一个Html页面:

<html>
    <body>
        <div class="content">
            <h1>XPath轴和函数详细语法</h1>
            <div class="detail"> 
				<span>掌握XPath轴,实现爬虫效率翻倍</span>
				<ul>
					<li>节点1</li>
					<li>节点2</li>
					<li style="color:blue">我在这里。节点3</li>
					<li>节点4</li>
					<li>节点5</li>
				</ul>
			</div>
			<div class="following"> 
				<span>掌握函数语法,快速定位标签</span>
				<div>常用函数</div>
			</div>
		<div>
    </body>
</html>

ancestor和 ancestor-or-self的使用

简单来说就是,一层和多层的关系。

# <li style="color:blue">我在这里。节点3</li> 节点的祖先们
//li[@style]/ancestor::*

# <li style="color:blue">我在这里。节点3</li> 节点的祖先们和自己
//li[@style]/ancestor-or-self::*

浏览器执行结果:

如图所示:ancestor 获取到了所有的祖先节点

attribute 、 namespace 、 parent、self

# <li style="color:blue"></li> 节点的sytle属性
# 获取所有属性使用通配符*
//li[@style]/attribute::style

# HTML本身不使用命名空间,名称空间主要用于xml,这里在赘述。

# <li style="color:blue"></li> 节点父级节点
# 只能取一层
//li[@style]/parent::*

# <li style="color:blue"></li> 节点自身
# 同 //li[@style]一致
//li[@style]/self::*

浏览器执行结果:

child、descendant和 descendant-or-self

# <div class="detail"></div> 的子节点
//div[@class='detail']/child::*

# <div class="detail"></div> 的后代们
//div[@class='detail']/descendant::*

# <div class="detail"></div> 的后代们和自己
//div[@class='detail']/descendant-or-self::*

浏览器执行结果:

following和 following-sibling

#<h1>XPath轴和函数详细语法</h1> 的后面的所有div节点
//div[1]/h1/following::div

#<h1>XPath轴和函数详细语法</h1> 的后面的所有div兄弟节点
//div[1]/h1/following-sibling::div

浏览器执行结果:

preceding 和 preceding-sibling

# <div class="following"></div>的前面的所有节点
//div[@class='following']/preceding::*

# <div class="following"></div>的前面的所有兄弟节点
//div[@class='following']/preceding-sibling::*

浏览器执行结果:

03 函数

XPath提供了丰富的内置函数,可以处理字符串、位置索引以及逻辑运算等复杂场景。

3.1 字符串函数

starts-with()、contains()和text()

# starts-with() 表示属性以XX开始
//div[starts-with(@class, 'follow')]

# contains() 表示属性包含XX
//div[contains(@class, 'tail')]

# text() 表示文本值
//div[text()=='常用函数']

浏览器执行结果:

3.2 位置索引

last()和 position()

# 获取<ul>里面的最后一个li元素
# 如果获取的是单一元素,可以通过string()的方式查看文本元素
//ul/li[last()]

# 获取<ul>里面的倒数第二个li元素
# 如果获取的是单一元素,可以通过string()的方式查看文本元素
//ul/li[last()-1]

# 获取<ul>里面的位置小于3的li元素
//ul/li[position() < 3]

浏览器执行结果:

3.3 逻辑运算

and 、or 和 not

# AND 关系:class等于content,并且第一个
//div[@class='content' and position() = 1]

# OR 关系:class等于content或者class等于detail
//div[@class='content' or @class='detail']

# OR 关系:div不包含class
//div[not(@class)]

浏览器执行结果:

04 小结

了解了本文,可以深入了解XPath的高阶用法。收藏本文,下次遇到复杂页面解析时,这些高阶技巧将助你轻松突破抓取瓶颈!你在实际工作中遇到过哪些XPath难题?欢迎留言讨论!

有了网段为什么还要有VLAN??? 近几日,在学习VLAN及VXLAN方面的知识,对于产生原因做一个总结及详解。 VLAN(Virtual Local Area Network,虚拟局域网),其主要用途是用来缩小广播域,即进行隔离。 先对广播域的一个概念做如下描绘:如下图,主机A、B、C、D均连接在交换机SW1上,其中A、C同网段为192.168.252网段,而B和D同网段,为192.168.250网段。 现,假如A与C第... 阅读详情

相关推荐

保姆级教程:用Anaconda+PyCharm搞定YOLOv8本地部署(附避坑指南)

本文提供了一份详细的YOLOv8本地部署指南,涵盖Anaconda环境配置、PyCharm集成到模型部署的全过程。特别针对国内开发者需求,整合了镜像加速和常见报错解决方案,帮助快速完成目标检测模型的本地部署与实战应用。

weixin_42528090的博客 433

Python中使用XPath

目录 XPath简介 XPath语法 选取节点 谓语(Predicates) 选取未知节点 选取若干路径 XPath 轴 XPath 运算符 使用lxml 摘自W3School官方文档:http://www.w3school.com.cn/xpath/index.asp XPath简介 XPath (XML Path Language)是一门在 HTML\XML 文档中查找...

pengjunlee的博客 4万+

机器学习——Anaconda下载安装教程

Anaconda详细下载安装教程

2401_83693485的博客 3067

DOM结构

一,DOM介绍 1.浏览器会把HTML文档解析成一个树结构,并且在此基础上定义了访问和操作 HTML 文档的标准。根据W3C标准我们称之为HTML DOM(Document Object Model)文档对象模型。 2.HTML 文档中的所有内容都是节点,且有以下几个类型。 整个文档是一个文档节点(root根节点) 每个 HTML 元素是元素节点 HTML 元素内的文本是文本节点 每个 HTML ............

过客如期的博客 4172

区块链入门:用账本、乐高和三台旧电脑讲懂分布式账本

区块链是一种去中心化的分布式账本技术,其核心原理是通过密码学哈希、共识机制和链式结构实现数据不可篡改与多方共同验证。它不依赖单一中心,而是将交易记录同步复制到多个节点,依靠数学规则而非人工信任达成一致,从而在数字世界构建可验证的信用基础设施。这种‘集体见证’模式显著提升了系统抗单点故障与人为干预的能力,广泛应用于供应链溯源、数字身份、教育管理及公益透明等需强信任保障的场景。本文以账本类比、乐高拆解和Ganache实操为线索,面向零基础读者通俗解析哈希值、挖矿与智能合约等关键概念。

weixin_30517215的博客 274

IPsec (主模式,野蛮模式)

IPsec vpn的主模式和野蛮模式

七汣的博客 3415

【xpath高级用法】总结很全!!!

文本为下一页,有标志 两个都满足(只是举个例子还有很多用法)比如说现在有翻页需求但是只显示页码,没有下一页或者其他标志。or表达式:比如下面这个例子,定位搜索框可以通过。选取文档中当前节点的结束标签之后的所有节点,and表达式:比如下面这个例子,选取这个为。可以和contains函数一起使用,可以使用这个选取当前页的后面一页。主要是对文本内容进行取值或定位。管道符号,可以选取若干路径。代表翻页结束,一般网页都会有。通配符,可以匹配所以标签。

NUT_0的博客 765

手把手完整实现STM32+ESP8266+MQTT+阿里云服务器+手机APP应用——第一节—阿里云物联网平台配置+IoTStudio界面绘制+MQTT.fx模拟MQTT客户端与使用AT命令发布订阅消息

通过MQTT.fx模拟连接以及通过CH340串口连接ESP8266发送AT命令,实现阿里云物联网平台发送数据同时接收数据,IOT studio界面显示数据。具体来说:使用ESP8266(本系列使用了ESP8266-ESP01/01S以及正点原子的ATK-ESP8266) 来连接网络,获取设备数据发送到阿里云物联网平台并显示数据,通过IOT studio界面显示数据并发送命令控制设备。本系列使用的主控芯片是STM32F103系列,当然也可以使用其他系列单片机都可以实现,思路都是一样的。同时本系列有手机APP源

嵌入式阿齐Archie 5万+

Xpath 高级用法

xpath 高级用法 1. 匹配当前节点下的所有: .// . 表示当前 // 表示当前标签下的所有标签 注: 要配合使用 2. 匹配某标签的属性值: /@属性名称 这里以input里的value值为例: 例:xpath(//input/@value) 3. 匹配多个路径 在一个xpath中写的多个表达式用 | 分开, 每个表达式互不干扰。 xpath("//tr[6]/td[2]/tex...

有什么问题回复不及时,可以私聊我。也可以加我的星球:知识爬行者 1436

fragstats:景观指数趋势分析

优快云@_养乐多_本文将介绍景观指数时间序列的趋势分析,包括趋势类型、斜率、截距等。以及景观指数突变分析所用的软件和 python 代码。结果如下图所示,

养乐多的博客 2860

FOC 电流采样方案对比(单电阻/双电阻/三电阻)

电流采样的作用 在FOC算法中,电流采样在反馈环节是相当重要的一部分,通常交流三相同步电机在进行坐标变换的时候,需要实时测量相电流,最终通过SVPWM实现电机转子磁场和定子磁场的同步转动,那么这里有三种方案,单电阻采样,双电阻采样,三电阻采样。本文参考ST的单电阻和三电阻采样以及TI的双电阻采样,结合实际中可能需要注意的地方进行总结分析。 单电阻采样 双电阻采样 三电阻采样 ...

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 4万+

XPath语法、轴、运算符-满满干货拿走不谢

XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。

小鹏linux的博客 1万+

S7-1200与ABB机器人进行SOCKET通信的具体方法示例

S7-1200与ABB机器人进行SOCKET通信的具体方法示例

Robot_PLC_HMI_Automation 3294

xpath定位常用函数

text()函数 //span[text()="测试文本"] contains ()函数 //button[contains(@class,"btn")] //div[3]/button[2]/span[contains(text(),"確定")] starts-with()函数 适用场景:xpath路径为”//*[@id=’pie_hiqdsduk6r’]”,由于pie_后的字符一直变化,故难以定位,现在将其利用starts-with()函数改写成如下格式即可定位到该元素 //*[starts-wi

diaojian66的博客 1972

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Xpath进阶——不可不知的内容(实用+常用)

它的返回值可能是节点,节点集合,原子值(文本),以及节点和原子值的混合等。举例一个典型的XPath查询表达式:/messages/message//child::node()[@id=0],其中/messages/message是路径(绝对路径以"/"开始),child::是轴表示在子节点下选择,node()是节点测试表示选择所有的节点。(查找顺序为:先找到body节点的顶级节点(根节点),得到根节点标签前的所有同级节点,执行完成后继续向下一级,顺序得到该节点标签前的所有同级节点,依次类推。

LYJbao的博客 4207

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

xpath定位(全)

xpath定位(全)简介1. 绝对定位:2. 相对路径:3. 标签属性定位:4. XPath Axes(轴)和Step(步) xpath是一种在xm文档中定位的语言,详细简介,请自行参照百度百科,本文主要总结一下xpath的使用方法,个人看法,如有不足和错误,敬请指出。 注意:xpath的定位 同一级别的多个标签 索引从1开始 而不是0 简介 选取节点 XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。 示例 谓语(Predicates) 谓语用来查找某个

Orchestrator_me的博客 1万+

Xpath高阶定位技巧,轻松玩转App测试元素定位!

XPath 轴是 XPath 语言中的一个重要概念,它可以根据节点之间的关系来选择节点。XPath 轴定义了节点的一个集合,这个集合由满足特定条件的节点组成。OR 表示可以在 XPath 表达式中放置 2 个条件,在 OR 的情况下,两个条件中的任何一个为真,就可定位到该元素。注意: 这里的[1]并不是数组下标的意思,可以理解为,从当前定位的元素向前数一代,也可以理解为向外一层。可以通过过定位一个节点,定位到当前的节点的兄弟节点、父节点、爷爷节点、祖先节点等等。从当前节点定位到它前面的兄弟姐妹节点。

霍格沃兹测试学院的博客 1342

Python--爬虫--XPath入门

Python--爬虫(爬取4)--XPath入门

qq_57663276的博客 1905

XSLT入门 -- 附录: XPath函数 --

录 --1 XPath函数--2 节点集合函数--3 字符串函数--4 布尔函数--5 数值函数1 XPath函数XPath提供了函数库以便计算表达式。函数分为节点函数、字符串函数、布尔函数和数值函数。这里将介绍XPath必然支持的几个函数。关于参数和返回值请参见参考文献[5]。2 节点集合函数last 返回上下文的长度。 position 返回上下文的

萝卜青菜 2028

XPath常用函数

目录 有关数值的函数 有关字符串的函数 关于布尔值的函数 有关序列的函数 一般性的函数 测试序列容量的函数 Equals, Union, Intersection and Except 合计函数 生成序列的函数 上下文函数 函数示例 摘自W3School官方文档:http://www.w3school.com.cn/xpath/index.asp 有关数值的函数 ...

pengjunlee的博客 3万+

XPath 函数大全

在本文的第一部分中,我们介绍了XPath并讨论了各种各样的从简单到复杂的XPath查询。通过把XPath查询应用到XML示例文件,我们详细说明了各种重要的XPath定义比如location step、contextnode、location path、axes和node - test。 我们然后讨论了多个简单查询组合成的复杂的XPath查询。我们还讨论了无线二进制XML(WBXML)-

小肥的专栏 2519

Xpath详解

XPath 的选择功能十分强大,它提供了非常简洁明了的路径选择表达式。另外,它还提供超过 100 个内置函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有想要定位的节点都可以用 XPath 来选取。。

weixin_51231433的博客 2188

[Xpath] Xpath基础知识

本文主要讲解Xpath相关知识点

Hudas的博客 4905

Xpath 用法总结

Xpath 用法总结

free_xiaochen的博客 3610

Python高级语法之xpath

本文介绍了XPath的安装与基本语法,并通过多个示例展示其使用方法。内容包括XPath的路径表达式、节点选择、属性提取等核心语法,以及如何运用XPath解析网页数据和图片素材。文中配有详细的操作截图,演示了从网页中提取文本内容和图片资源的具体步骤,为网络爬虫开发提供了实用指导。通过本教程,读者可以快速掌握XPath在数据抓取中的应用技巧。

zouyang920的博客 242

XPath入门

XPath是一种用于在 XML 文档中检索信息的语言。它通过路径表达式导航 XML 文档,广泛应用于各种场景。XPath的灵活性和强大功能使其成为在XML结构中准确定位和提取数据的重要工具。

冰万森的博客 1万+

XPath 常用函数

XPath函数 函数定义    函数名  返回类型(不能用void)   参数类型 常用函数  节点集函数      last() 返回当前上下文中的最后一个节点的位置号数。    position() 返回当前节点的位置的数字,位于第多少个。   count(node-set) 返回节点集node-set中的节点数。   id(mark) 根据在DTD中声明为ID类型的标识符选择元素

zzcv_的专栏 5674
上一篇: 从零到高手:掌握XPath的5个神技,让你数据抓取快人10倍
下一篇: XPath爬虫实战:5分钟轻松实现当当网图书列表内容抓取
智_永无止境
博客等级 码龄10年 803粉丝 404原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智_永无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值