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

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

01 引言

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

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

02 Xpath简介

XPath是一种用于在XMLHTML文档中定位和遍历元素的语言。在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查询吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

智_永无止境

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

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

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

打赏作者

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

抵扣说明:

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

余额充值