XPath网页数据提取的得力助手

news2024/11/26 1:39:06

使用影刀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提供了多种轴,如 ancestordescendantfollowing 等,帮助我们根据节点之间的关系进行选择

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 从网页中获取你需要的数据时,你会发现它为你打开了一个全新的世界,让你在处理网页数据时更加得心应手。所以,加油吧!伙伴们!

感谢大家,请大家多多支持!

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

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

相关文章

介绍 MarsCode AI:下一代智能编程助手

在现代软件开发中&#xff0c;效率和代码质量的提升越来越成为开发者关注的焦点。今天&#xff0c;我们将介绍一款革命性的编程助手—— 豆包 MarsCode 编程助手&#xff0c;它由北京引力弹弓科技有限公司开发&#xff0c;旨在极大地提高开发流程中的各种环节&#xff0c;让编程…

Cuda-By-Example - 4

引入Thread概念 第4章使用GPU做并行运算的例子&#xff0c;归结起来就是定义一个内核函数&#xff0c;将数组dev_a和dev_b某一对元素相加。GPU发起N个block运行内核函数。每个block有自己的索引&#xff0c;这样kernel就可以凭借这个索引区分自身&#xff0c;来计算数组对应的…

Github 优质项目推荐(第七期):涵盖免费服务、API、低代码、安卓root、深度学习

文章目录 Github优质项目推荐 - 第七期一、【LangGPT】&#xff0c;5.7k stars - 让每个人都成为提示专家二、【awesome-selfhosted】&#xff0c;198k stars - 免费软件网络服务和 Web 应用程序列表三、【public-apis】&#xff0c;315k stars - 免费 API四、【JeecgBoot】&am…

如何在 cPanel 中使用 PHP-FPM

PHP性能一直是影响网站托管的一个重要问题。PHP是当前网络上使用最广泛的服务器编程语言&#xff0c;远远领先于其他语言。最受欢迎的内容管理系统和电子商务应用程序&#xff0c;如WordPress、Joomla、Drupal、Magento等&#xff0c;都是用PHP编写的。 PHP-FPM加速了在繁忙服务…

推荐几本编程入门书目

对于编程入门&#xff0c;推荐以下几本书籍&#xff0c;这些书籍覆盖了不同的编程语言&#xff0c;适合零基础的学习者逐步掌握编程基础&#xff1a; 1. 《Python编程快速上手——让繁琐工作自动化》 特点&#xff1a;以简单易懂的方式介绍了Python的基础知识和编程概念&#…

2024年四非边缘鼠鼠计算机保研回忆(记录版 碎碎念)

Hi&#xff0c;大家好&#xff0c;我是半亩花海。写下这篇博客时已然是金秋十月&#xff0c;心中的石头终于落地&#xff0c;恍惚间百感交集。对于保研这条路&#xff0c;我处于摸着石头过河、冲击、随缘的这些状态。计算机保研向来比其他专业难&#xff0c;今年形势更是艰难。…

如何做好薪酬福利体系设计,更好实现员工激励?

如何做好薪酬福利体系设计&#xff0c;更好实现员工激励&#xff1f; 中国作为福利制度建设的佼佼者&#xff0c;尤其在新中国成立后&#xff0c;员工福利体系日益丰富&#xff0c;涵盖了健康保障、休假权益及养老规划等多元化形式&#xff0c;作为间接报酬&#xff0c;有效激…

按模板批量生成工作表

按模板批量生成工作表&#xff0c;前提一个模板&#xff0c;然后用代码遍历循环填写人名&#xff0c;再保存为副本&#xff0c;即可达到效果 按模板批量生成工作表代码 Sub 批量生成员工表()last Sheet73.Range("C65535").End(xlUp).Row 普通区域arr Sheet73…

Redis配置篇 - 指定Redis配置的三种方式,以及Redis配置文件介绍

文章目录 1 指定Redis配置的三种方式1.1 通过命令行参数来指定Redis配置1.2 通过配置文件来指定Redis配置1.3 在服务器运行时更​​改 Redis 配置 2 关于Redis配置文件 1 指定Redis配置的三种方式 1.1 通过命令行参数来指定Redis配置 在redis启动时&#xff0c;可以直接通过命…

UCI-HAR数据集深度剖析:训练仿真与可视化解读

在本篇文章中&#xff0c;我们将深入探讨如何使用Python对UCI人类活动识别&#xff08;HAR&#xff09;数据集进行分割和预处理&#xff0c;以及运用模型网络CNN对数据集进行训练仿真和可视化解读。 一、UCI-HAR数据集分析及介绍 UCI-HAR数据集是一个公开的数据集&#xff0c…

xtu oj 彩球

样例输入# 3 7 5 3 1 2 3 1 2 3 1 6 4 3 1 2 2 3 1 3 6 2 2 1 2 3 4 5 5 样例输出# Yes Yes No 滑动窗口问题 AC代码 #include<stdio.h> #define N 10005 int main(){int T;scanf("%d",&T);while(T--){int n,m,k,i,flag1;//m个k种颜色 scanf("%d%d…

【C++入门篇 - 3】:从C到C++第二篇

文章目录 从C到C第二篇new和delete命名空间命名空间的访问 cin和coutstring的基本使用 从C到C第二篇 new和delete 在C中用来向系统申请堆区的内存空间 New的作用相当于C语言中的malloc Delete的作用相当于C语言中的free 注意&#xff1a;在C语言中&#xff0c;如果内存不够…

一台电脑轻松接入CANFD总线_来可CNA板卡介绍

在工业控制领域&#xff0c;常常使用的总线技术有CAN(FD)、RS-232、RS-485、Modbus、Profibus、Profinet、EtherCAT等。RS-485以其长距离通信能力著称&#xff0c;Modbus广泛应用于PLC等设备&#xff0c;EtherCAT则以其低延迟和高实时性在自动化系统中备受青睐。 其中&#xff…

The Ether: EvilScience VM靶机打靶记录

一、靶机介绍 下载地址&#xff1a;https://www.mediafire.com/file/502nbnbkarsoisb/theEther.zip 二、信息收集 扫描一下目标靶机的ip&#xff1a;192.168.242.135 arp-scan -l 扫描端口 nmap -p- -A 192.168.242.135 这里看开放了 22&#xff0c;80端口 扫描一下目录 …

剧场的客户端形式区别,APP,小程序,H5的不同优势以及推广方案

剧场的客户端形式区别与推广策略 在数字化时代&#xff0c;剧场的线上化成为大势所趋。不同的线上平台如APP、小程序和H5各有千秋&#xff0c;如何选择最适合自己的平台&#xff0c;并制定有效的推广方案&#xff0c;成为了剧场管理者需要考虑的重要问题。 APP&#xff1a;深度…

【每日刷题】Day138

【每日刷题】Day138 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 6. Z 字形变换 - 力扣&#xff08;LeetCode&#xff09; 2. 38. 外观数列 - 力扣&#xff08;Leet…

【2024版】超详细安装教程以及环境配置和使用指南, 学Python看完这一篇就够了!

windows版本PyCharm安装 1.点击蓝色链接---->PyCharm官网&#xff0c;进入之后是这个界面。 2.点击"Download"进入下载页面 注意&#xff1a;若有老版本IDEA&#xff0c;先卸载&#xff08;控制面板卸载&#xff09;&#xff0c;再安装&#xff01; 以管理员身…

1788C - Matching Numbers

给你n&#xff0c;求permutation [ 1 , 2 n ] [1,2n] [1,2n]数字能不能构造出 n n n个数字&#xff0c;每个数字是其中两个数字之和。 偶数不行&#xff0c;通过之和相同构造n和k的关系&#xff0c;k是构造后的首项。 奇数的话&#xff0c;我们把 [ 1 , 2 n ] [1,2n] [1,2n]…

两种方式创建Vue项目

文章目录 引言利用Vue命令创建Vue项目准备工作安装Vue CLI创建Vue项目方法一&#xff1a;使用vue init命令方法二&#xff1a;使用vue create命令启动Vue项目 利用Vite工具创建Vue项目概述利用Vite创建项目启动项目 结语 引言 大家好&#xff0c;今天我将向大家展示如何使用不…

【计算机方向】三本计算机视觉IEEE系列,发文量高,影响因子呈上升趋势,备受国人追捧!

本期将为您带来三本计算机SCI 妥妥毕业神刊&#xff01; IEEE Transactions on Pattern Analysis and Machine Intelligence IEEE Transactions on Knowledge and Data Engineering IEEE Transactions on Cognitive and Developmental Systems 期刊名称&#xff1a;IEEE Tr…