从零到高手:掌握XPath的5个神技,让你数据抓取快人10倍

Selenium高级实战:从动态网页交互到自动化工程实践 在Web自动化与数据采集领域,处理动态渲染页面和复杂用户交互是核心挑战。传统HTTP请求库难以应对需要登录、执行JavaScript或触发异步加载的场景。Selenium作为浏览器自动化工具,其原理是通过程序驱动真实浏览器,模拟人类操作行为,从而实现对动态内容的完整渲染与交互。这一技术价值在于突破了静态抓取的局限,为自动化测试、数据采集和流程自动化提供了通用解决方案。在应用场景上,它广泛用于需要处理SPA(单页应用)、绕过反爬机制或执行重复性Web操作的工程实践。本文聚焦于Selenium的高级应用,深入探 阅读详情

平台奖励创作,可能会升级VIP文章,可以移步我的公众号:【编程朝花夕拾】,且可获取首发内容。

01 引言

同事每天准点下班,而我还在加班写爬虫?项目Deadline逼近,数据却卡在网页结构里抽不出来?答案可能藏在XPath里。

无论是爬虫、还是现在流行的大模型的Agent工作流,解析网页数据的工具都可能用到Xpath。Xpath到底是什么呢?

02 Xpath简介

XPath是一种用于在XML和HTML文档中定位和遍历元素的语言。在Web开发中,XPath是非常重要的技能之一。掌握XPath的语法可以帮助开发人员更快速地解析和提取数据。

有过Jquery基础的可能会更加容易上手一下,归根到底,就是定位网页中的DOM节点,取出自己想要的数据。现在主流的浏览器如Chrome 本身就支持Xpath的语法,更方面我们直接调试。

03 基础语法

3.1 语法

表达式描述
nodename选取此节点的所有子节点。
/从根节点选取(取子节点)。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点)。
.选取当前节点。
…选取当前节点的父节点。
@选取属性。
*通配符,匹配任何元素节点

值得注意的是://忽略节点位置的

3.2 表达式案例

路径表达式结果
dd选取所有名为 dd的节点
/dd选取根元素 dd
dd/span选取属于 dd 的子元素的所有 span元素
//span选取所有 span子元素,而不管它们在文档中的位置
dd//span选择属于 dd 元素的后代的所有 span元素,而不管它们位于 dd之下的什么位置。
//@href选择包含href属性的所有节点。

3.3 浏览器中的使用

语法:

$x("xpath表达式");

例:获取所有包含href属性的节点

04 【必学】5个神技

语法很简单,如果要熟练使用,就需要多家练习。这里总结5个必学神奇,轻松驾驭80%的场景

案例Html:

<html>
    <body>
        <div class="content-1">
            <h1>内容1</h1>
            <p>Paragraph</p>
			<input type="text" value="1">
            <a href="example.com">链接跳转1</a>
        </div>
		<div>
			<h1>内容2</h1>
			<ul class="content-2">
				<li>测试1</li>
				<li>测试2</li>
				<li>
					测试3
					<p>Paragraph测试3</p>
				</li>
				<li>
					测试4
					<a href="simonking.com">链接跳转4</a>
				</li>
			</ul>
			<ul class="content-3">
				<li>测试31</li>
				<li>测试32</li>
				<li>
					测试33
					<p>Paragraph测试33</p>
				</li>
				<li>
					测试34
					<a href="simonking.com">链接跳转34</a>
				</li>
			</ul>
		</div>
    </body>
</html>

4.1 「绝对路径」陷阱

假如我们需要会获取第一个div下的p标签

# 绝对路径
/html/body/div/p

# 相对路径
//div[@class='content-1']/p

两种方案都可取代需要的节点,但是我们更推荐相对路径。因为绝对路径必须严格遵守节点顺序,一旦发生更改,就会造成取值错乱,可移植性很差,这也是90%的新手最容易踩的坑。

4.2 模糊匹配黑科技

获取class名称包含content-的节点

//*[contains(@class, "content-")]

这样可以轻松应对动态的节点。

4.3 同级节点穿梭术

获取第二个div中h1标签之后的所有同级标签

这里需要使用到Xpath的轴(Axes)。

//div[2]/h1/following-sibling::ul

其中following-sibling就是轴(Axes),表示后续的同级节点。其他的轴,后面我们单独来讲。

4.4 条件筛选绝招

获取class为content-2的ul,下中间的两个li

//ul[@class='content-2']/li[position()>1 and position()<last()]

通过position()函数获取位置,last() 表示最后一个位置。

4.5 文本定位必杀技

获取链接跳转34的a标签

//a[text()='链接跳转34']

05 高手的进阶技巧

Chrome开发者工具隐藏功能,按下Ctrl+F在Elements面板直接调试XPath,实时高亮匹配结果。

性能优化三原则:

  1. 少用//多用具体标签
  2. 善用轴(axis)减少扫描范围
  3. 优先使用@id等唯一属性

06 小结

你的下一个爬虫项目,可能只需要10行代码。XPath就像数据世界的望远镜,当别人还在用肉眼搜寻数据时,你已经拥有了降维打击的能力。现在打开浏览器开发者工具,用Ctrl+F开启你的第一个XPath查询吧!

深入解析MTK DRM初始化流程:从KMS模块到组件框架 本文深入解析了联发科(MTK)平台上DRM显示框架的初始化流程。从内核模块加载、Component框架管理依赖,到核心的mtk_drm_bind函数构建KMS对象(CRTC、Plane、Encoder、Connector),最终完成DRM设备注册并创建用户空间接口。文章结合调试经验,为开发者梳理了从驱动启动到屏幕点亮的完整路径与关键排查点。 阅读详情

相关推荐

做小程序支付时,我是怎么被“虚拟支付”绊了一跤的

微信小程序支付开发中,普通支付与虚拟支付存在本质差异。开发者常误将虚拟权益(会员、点数等)当作普通商品支付,导致审核失败。两者在审核关注点、结算方式、API调用及平台政策上都截然不同。关键点在于:1)先明确交易对象类型;2)产品命名需真实反映权益性质;3)支付成功≠业务完成;4)审核说明要详细描述交付逻辑;5)避免依赖过时规则。正确顺序应是:判断商品属性→选择支付类型→设计订单系统→准备审核材料。这个认知差异比技术实现更重要,提前理解平台规则可大幅减少返工。

zhurizhe71的学习之路 2582

OpenClaw智能爬虫框架:从配置到企业级部署实战

网络爬虫作为数据采集的核心技术,其核心原理是通过模拟HTTP请求解析网页结构。传统爬虫开发面临XPath维护困难、反爬策略适配等痛点,而OpenClaw创新性地采用机器学习与DOM树分析技术,实现可视化规则生成和自适应页面变更。该框架特别适用于电商价格监控、舆情分析等需要处理动态网页的场景,通过智能推断、反反爬四层防御等机制,将开发效率提升5倍以上。在分布式部署方面,OpenClaw支持Redis集群和RabbitMQ消息队列,配合Grafana监控看板,可构建日均500万级数据抓取的高可用系统。

weixin_34318326的博客 451

CDR学习笔记——02

这篇写一些高级CDR的架构原理。

... 1016

xpath 获取父级,同级节点

5、descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。6、ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。7、preceding-sibling 选取当前节点之前的所有同级节点。8、following-sibling 选取当前节点之后的所有同级节点。10、following 选取文档中当前节点的结束标签之后的所有节点。9、preceding 选取文档中当前节点的开始标签之前的所有节点。11、self 选取当前节点。

yuzhihao_的博客 3783

HMMER实战:从零部署到序列分析

本文详细介绍了HMMER工具的安装与使用,从源码编译到环境配置,再到核心工具hmmbuild、hmmsearch等的实战应用。通过球蛋白序列分析案例,展示了HMMER在生物信息学中的强大功能,帮助读者快速掌握序列分析技巧。

weixin_42529366的博客 251

主板USB接口全部失效解决方案(通用串行总线USB控制器有黄色叹号)保姆级教程亲测有效

通用串行总线控制器总是有叹号解决办法 办公室的崩腾时代老电脑,疫情期间没人用,来了开机之后发现鼠标键盘都用不了,本以为是主机放时间长出了问题,后来想起来就百度了“鼠标键盘都失效”的标题,结果发现了“串行总线控制器总是感叹号”的关联问题。正好办公室电脑都装有teamviwer常用来远程办公(在家偷懒)。所以通过远程发现电脑室可以运行的。并在控制面板发现:通用串行总线控制器总是感叹号,插入外设时USB无反应。如图:​ 并且右键选中其中一个,点击最后一个选项:“属性” 可以发现“设备状态”中会提示“由...

xiao_bai_0_0的博客 2万+

Xpath定位同级、父级元、子级元素、最后一个元素

【代码】Xpath定位同级元素。

weixin_42636075的博客 6939

SECS/GEM协议学习教程

摘要:SECS/GEM是半导体制造设备通信的国际标准,定义了主机系统与设备间的通信规范,包括设备控制、状态监控、数据采集等功能。协议采用分层架构(应用层、消息层、传输层、物理层),支持关键消息类型如S1F13(建立通信)、S2F13(数据采集)等。通信流程涵盖建立连接、数据交换和终止会话,并通过状态变量(SVID)、事件(CEID)等实现实时交互。典型应用包括设备初始化、报警处理及配方管理,需处理数据类型(如U2、A、L)和通信调试问题。

GitHub个人仓库地址:https://github.com/feiyuluoye ; 个人塔罗牌占卜平台:http://118.126.82.12:8080/ ; 欢迎广大Coding友共同交流讨论。 2060

XPath语法要点

什么是XPath XML Path Language    访问xml中任意位置的一种语法,实际上是一种对于xml文档位置(路径)的描述,与文件系统的路径表达相似 XML是一种层次结构的文档,有一个根元素。构成要素是节点和节点的属性,各个节点之间由嵌套形成parent-child关系 主要层次 /root                            根节点 cur

emy_zj的专栏 869

GJB软件需求规格说明-编制指南

《软件需求规格说明》是软件开发过程必不可少的文档,并且需要评审,也是后续鉴定试验的依据,因此,非常有必要认真对待此文档。 文档对于很多开发技术人员来说是一件非常头疼的事,虽然标准有要求,但是光看标准还是难以下笔。 本文将详细讲解如何按照GJB 438C的要求编写《软件需求规格说明》。 注:文中有背景颜色内容为标准内容,加粗部分为范例。斜体部分为解释。 全文1.3万字

Abel的博客 6357

保姆级教程:一步步创建 ABAP Text Table

有朋友反馈,问有没有一个自己动手创建 Text Table 的例子,因为自己没有动手实践过,总觉得心里不踏实。这个行为的语义是,ZAI_TYPE_T 这张表的 AI_TYPE 字段值,不能随便维护,必须是表。然后另一个需要添加的字段是 AI_TYPE 这个字段值对应的文本值,本例笔者采用 SAP 标准的。也是自己创建的,很简单的一个 Data Element,类型为 CHAR,长度为 2.依次给主表的 01,02,03 三个字段值维护对应的描述信息,最后效果如下。按照下面的字段结构,创建另一。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4276

xpath —— 父子、兄弟、相邻节点定位方式详解

1. 由父节点定位子节点最简单的肯定就是由父节点定位子节点了,我们有很多方法可以定位,下面上个例子:对以下代码:<html><body><div id="A"> <!--父节点定位子节点--> &...

weixin_44090305的博客 4万+

2025华为od机试真题B卷【停车场费用统计】Python实现

2025华为od机试真题B卷【停车场费用统计】Python实现

MISAYAONE的博客 538

XPATH常用搜集总结

【代码】XPATH常用搜集总结。

cxx0515的博客 192

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

XPath爬虫实战:5分钟轻松实现当当网图书列表内容抓取

我们已经分了两节介绍了`XPath`的基础用法、进阶技巧以及特殊神技,但都是基于浏览器的测试的,并没有实际运用的场景。本节我们将通过实际的案例应用`Xpath`技术。

static_coder的博客 1435

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Sqribble:浏览器里的文档操作系统与模板自动化原理

文档自动化正从简单排版升级为结构化内容交付范式。其核心在于将‘内容’与‘形式’解耦,依托模板驱动的确定性规则引擎实现语义化布局、动态分页与跨平台一致性渲染。不同于概率性AI生成,这类工具以JSON/YAML定义样式、布局与API接口,支持URL智能净化、Word深度解析及PDF双重签名验证,在技术文档、营销手册、知识库建设等场景中显著降低格式维护成本,提升专业交付效率与可审计性。

weixin_33850015的博客 391

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

常用的xpath

常用的xpath

伟庭的博客 1125

【Xpath】使用following-sibling获取后面的同级节点

以下面html代码为例子,尝试使用xpath提取“2022年06月07日” 关键点在于使用“following-sibling”提取后面的同级节点参考:http://xpather.com/

MacwinWin的博客 915

【爬虫】Xpath高级用法

xpath速度比较快,是爬虫在网页定位中的较优选择,但是很多网页前端代码混乱难以定位,而学习定位也较为不易(主要是全面的教程较少),这里列出一点编程过程中可能有用的东西,欢迎共同学习批评指正。 试验环境:Python环境,lxml.etree 试验所使用的html代码 &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&g...

xueba8的博客 1577

xpath获取同级元素

XPath轴(XPath Axes)可定义某个相对于当前节点的节点集: 1、child 选取当前节点的所有子元素 2、parent 选取当前节点的父节点 3、descendant 选取当前节点的所有后代元素(子、孙等) 4、ancestor 选取当前节点的所有先辈(父、祖父等) 5、descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身 6、ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身 7、preceding-si...

qq_37164003的博客 3330

xpath 获取当前节点的父节点,兄弟节点的方法

xpath_input_exp_mark = '//label[contains(text(), "文本内容")]/../following-sibling::div[1]//input'browser.find_element_by_xpath(xpath_input_exp_mark).. 表示当前节点的父节点following-sibling::div[1] 表示当前节点的兄弟节点中的 第 1

HeatDeath的博客 4万+

xpath 节点集太多,只需要节点集中的前几个节点怎么办?

这个时候,用节点集函数position() 比如//tr[@class='top']是定位了所有符合条件的tr节点,这个时候你只想要期中前五个,怎么办? (1)position方法,知道这个方法后,想要第几个都可以实现。 //tr[@class='top'][position()=1 or position()=2 ... or position()=5] 当然,...

小小的客栈 大大的江湖 8249

Python selenium xpath —— 父子、兄弟、相邻节点定位方式详解

1. 由父节点定位子节点最简单的肯定就是由父节点定位子节点了,我们有很多方法可以定位,下面上个例子:对以下代码:&lt;html&gt; &lt;body&gt; &lt;div id="A"&gt; &lt;!--父节点定位子节点--&gt; &lt;div id="B"&gt; &lt;div&gt;parent to child&amp

xiao1_1bing的博客 3万+

css_selector定位,比xpath速度快,语法简洁

driver.get("http://www.baidu.com")#根据ID来定位driver.find_element_by_css_selector('#kw').send_keys('selenium')driver.find_element_by_id('su').click() #根据class来定位driver.find_element_by_css_selector('.s_ip...

weixin_30657541的博客 670
上一篇: 开源了,优雅的Controller,应该这样写!
下一篇: XPath高阶玩法:灵活使用Axes技巧+函数,爬虫效率翻倍!
智_永无止境
博客等级 码龄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、付费专栏及课程。

余额充值