使用影刀RPA操作网页元素,你会发现总会有获取不到情况,这时我们就需要使用XPath来获取了。上一篇博文抓取小说内容,我们就是使用XPath来定位元素,简单快捷。
今天我们就来简单聊聊XPath!
在当今数字化的时代,我们经常会遇到这样的情况:想要从网页中获取特定的数据,但却感觉无从下手。你是否曾为了从大量的网页信息中筛选出自己需要的那部分而烦恼不已?比如说,你是一个电商从业者,需要从竞争对手的网站上获取商品价格和库存信息,以便制定更有竞争力的策略;或者你是一个数据分析师,想要收集网页上的用户评论来进行情感分析。这些场景下,手动复制粘贴显然效率低下且不准确,而 XPath 就像是一把神奇的钥匙,能够帮助我们轻松打开网页数据的宝库。
1. XPath定义
XPath,全称 XML Path Language,即 XML 路径语言。它是一种用于在 XML 和 HTML 文档中查找信息的语言。XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径类似于您在常规的文件系统中看到的路径。可以把网页想象成一个巨大的图书馆,每个网页元素就像是一本书,而 XPath 就是帮助你快速找到你想要那本书的索引系统。它通过定义路径表达式来选取 XML 或 HTML 文档中的节点或者节点集。节点可以是元素、属性、文本等等。我们通过这些路径表达式结合在一起,一步步就能接近你要查找的节点。
HTML 文档就像是一棵大树,每个标签就是树上的一个节点。XPath 能够让你沿着这棵树的 “枝干”(路径),准确地找到你想要的 “树叶”(具体元素或数据)。比如,你要在一个网页中找到所有的<p>
标签(段落标签),XPath 就可以帮你快速定位到它们。
html 结构图:
父节点(Parent):HTML是body和head节点的父节点;
子节点(Child):head和body是HTML的子节点;
兄弟节点(Sibling):拥有相同的父节点就是兄弟节点,比如head和body,title和div不是兄弟,因为他们不是同一个父节点。
祖先节点(Ancestor):body是span的祖先节点,爷爷辈及以上
后代节点(Descendant):p是HTML的后代节点,孙子辈及以下
我们就是依据这些结构布局特点,不管是绝对路径还是相对路劲去查找节点元素。从而获取网页数据。
2. XPath优势
2.1 精准定位元素
XPath 能够非常精确地定位到网页中的元素。无论网页结构多么复杂,只要你熟悉 XPath 的语法,就可以像狙击手一样,准确无误地找到你目标数据所在的位置。比如说,在一个包含大量表格和表单的网页中,你想要获取某个特定单元格中的数据,XPath 可以通过指定表格的行号、列号以及单元格的属性等信息,直接定位到该单元格。
2.2 高效提取数据
当你需要从多个网页中提取相同类型的数据时,XPath 的优势就更加明显了。你只需要编写一次 XPath 表达式,就可以在不同的网页上重复使用,快速提取出你需要的数据。这大大提高了数据提取的效率,节省了大量的时间和精力。想象一下,如果你要从一百个类似结构的网页中获取商品名称和价格,使用 XPath 可能只需要几分钟,而手动操作则可能需要几个小时甚至几天。
2.3 与其他技术兼容配合
XPath 可以与很多编程语言和工具配合使用,比如 Python 的 BeautifulSoup 库、Java 的 XPath API 等。RPA自动化工具也同时植入了XPath支持,对于难以获取的网页元素,就可以使用XPath来获取了,相当的简便有效。这使得它在实际应用中非常灵活,无论你是使用哪种编程语言进行开发或是操作RPA软件,都可以轻松地集成 XPath 来进行网页数据提取。就像一个万能的插件,能够无缝地融入到各种不同的技术生态系统中,为你的开发工作提供强大的支持。
3. XPath 的基本语法
3.1 节点选择
- 绝对路径
以一个斜线/开头,表示从根节点开始选择。例如,/html/body/div/p表示选择 HTML 文档中<html>标签下的<body>标签下的<div>标签下的<p>标签。这种方式就像是从城市的主干道一路找到小区里的某栋楼的某个房间,虽然很准确,但是如果网页结构稍有变化,整个路径可能就需要重新调整。
- 相对路径
相对路径不以/开头,它是相对于当前节点进行选择的。比如,.//p表示在当前节点下的所有后代节点中选择<p>标签。这就好比你在一个房间里找东西,你只需要关注这个房间里的各个角落和柜子等,而不需要从整栋楼的入口开始找起。相对路径更加灵活,在实际应用中使用频率也更高。
3.2 通配符
*通配符
代表任意元素。例如,//div/*
表示选择<div>
标签下的所有子元素,不管它是什么标签。就像你在一个盒子里找东西,你不知道具体是什么,但只要是在这个盒子里的东西你都要,这时*
就发挥了作用。
@*通配符
代表任意属性。比如,//a[@*]
表示选择所有带有属性的<a>
标签。这就像是在一群人中找那些有 “特点”(属性)的人,不管这个特点是什么。
3.3 谓语
谓语用于进一步筛选节点,它放在方括号[]
中。
例如:
- //p[2] 表示选择第二个<p>标签。这里的2就是谓语,它指定了要选择的<p>标签的位置。
- //div[@class='example'][1] 表示选择第一个类名为example的<div>标签。这里[@class='example']是根据属性进行筛选,[1]是进一步选择满足条件的第一个节点。
3.4 函数
XPath提供了丰富的函数,如 contains()、starts-with()、substring() 等,可以帮助我们进行更复杂的选择。
3.5 轴选择
XPath提供了多种轴,如 ancestor
、descendant
、following
等,帮助我们根据节点之间的关系进行选择
4. 选择合适的XPath表达式
4.1 选择表达式技巧
选择合适的XPath表达式是数据提取和网页自动化的关键。一个精准的XPath表达式可以帮你快速定位到目标元素,而一个不准确的表达式可能会导致错误的数据提取或测试失败。以下是一些选择合适XPath表达式的实用技巧
- 明确目标元素
在编写XPath表达式之前,首先要明确想要定位的目标元素是什么。这可能包括文本内容、属性值或特定的HTML标签。了解目标元素的特征,如类名、ID、属性等,可以帮助你构建更精确的XPath路径。
-
使用浏览器的开发者工具
大多数现代浏览器都内置了开发者工具,这些工具可以帮助你查看网页的DOM结构,并生成XPath表达式。通过右键点击网页元素并选择“检查”或“审查元素”,可以查看元素的HTML代码,并从中提取XPath的绝对或相对路劲。这个方法在实际操作中需要修改变通,它获取的结构路劲是写死的,往往我们需要的是动态的元素。
-
简化XPath表达式
尽量使用最短的路径来定位元素。例如,如果一个元素有独特的ID或类名,那么使用这些属性来构建XPath通常更简单、更可靠。避免使用过于复杂的路径,如包含多个祖先节点的路径。
- 使用通配符和轴
XPath提供了通配符(*
)和轴(如parent::
、child::
、ancestor::
等)来帮助你构建更灵活的表达式。例如,//*[contains(text(), 'targetText')]
可以选取包含特定文本的所有元素。
- 测试XPath表达式
在实际应用XPath之前,应该在不同的页面和不同的浏览器上测试你的XPath表达式,确保它在各种情况下都能正常工作。
- 处理特殊情况
有时候,网页的结构可能会因为某些特殊情况而变得复杂,如iframe、动态加载的内容等。在这些情况下,你可能需要使用更高级的技巧,如使用JavaScript执行XPath查询。
- 运用XPath函数
XPath提供了许多内置函数,如last()
、position()
、translate()
等,这些函数可以帮助你处理更复杂的选择逻辑。
4.2 XPath浏览器扩展
XPath Helper是一款非常实用的浏览器插件,它专门设计用于帮助开发者和网页爬虫工程师高效地测试和调试XPath表达式。通过这个工具,用户可以轻松地在网页上选择元素并提取其XPath代码,从而简化数据抓取和网页分析的工作流程。
下载地址:
https://chrome.zzzmh.cn/info/hgimnogjllphhhkhlmebbmlgjoejdpjl
下载后里边有安装说明,安装说明,一步步安装到谷歌浏览器就可以了。
安装后建议重启谷歌浏览器,就可以使用了。
点击XPath Helper,会有一个黑色的弹窗,我们在左边输入元素路劲,右边会实时显示捕获结果。同时页面中如果有页面捕获了就标记黄色显示。依据这个工具,我们就能测试XPath选择的路劲是否正确了。
/html/body/div[1]/div[1]/div[5]/div/div/div[3]/ul/li[1]
5. 学习XPath的资源路线
5.1 在线文档
W3Schools 提供了详细的 XPath 教程,包括语法介绍、示例代码等。它的教程简洁明了,非常适合初学者入门。可以在上面通过实际的例子来理解 XPath 的各种概念和用法。
5.2 实践项目
学习 XPath 最好的方式就是通过实践项目来巩固知识。你可以选择一些自己感兴趣的领域,比如抓取电影资讯网站上的电影评分和评论,或者收集美食网站上的菜谱信息等。在实践过程中,你会遇到各种问题,通过解决这些问题,你会对 XPath 的理解更加深刻,并且能够掌握如何在实际场景中灵活运用它。
5.3 加入社区和论坛
参与 XPath 相关的社区和论坛可以让你与其他开发者交流经验和心得。在这些地方,你可以提出自己的问题,分享自己的见解,还可以学习到别人在使用 XPath 过程中遇到的问题和解决方案。社区和论坛上有很多关于 XPath 的讨论和问答,可以从中获取很多宝贵的信息和建议。
5.4 结合编程语言学习
XPath 通常需要与编程语言一起使用来实现网页数据提取等功能。可以选择一门你熟悉的编程语言,如 Python、Java 等,然后学习如何在该语言中使用 XPath。比如,在 Python 中,你可以使用 BeautifulSoup 库结合 XPath 来解析 HTML 文档。这样不仅可以学习 XPath,还能提升你的编程能力和综合应用能力。
6.最后
XPath 是一个非常强大且实用的工具,它在网页数据提取、自动化测试、内容管理等领域都有着广泛的应用。虽然它的语法可能一开始看起来有些复杂,但是只要你通过不断的学习和实践,就能够熟练掌握它。就像学习任何一门新技能一样,需要有耐心和毅力。当你能够熟练运用 XPath 从网页中获取你需要的数据时,你会发现它为你打开了一个全新的世界,让你在处理网页数据时更加得心应手。所以,加油吧!伙伴们!
感谢大家,请大家多多支持!