Python爬虫:XPath基本语法
XPath(XML Path Language)是一种用于在XML文档中定位元素的语言。它使用路径表达式来选择节点或节点集,类似于文件系统中的路径表达式。
不啰嗦,讲究使用,直接上案例。
导入
pip3 install lxmlfrom lxml import etree
案例样本
xml = '''<html lang="zh"><head><meta charset="UTF-8"><title>示例网页</title></head><body><h1>欢迎来到我的网站</h1><p>这是一个简单的HTML页面,用于演示XPath解析。</p><ul><li><a href="https://www.example.com/page1">链接1</a></li><li><a href="https://www.example.com/page2">链接2</a></li><li><a href="https://www.example.com/page3">链接3</a></li></ul><div id="content"><h2>内容标题</h2><p>这是一段内容。</p><p>这是另一段内容。</p></div></body></html>
'''
扫一扫欢迎关注,一起学习!

基本语法
| 表达式 | 描述 |
| / | 从根节点选取 |
| // | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点) |
| . | 选取当前节点 |
| .. | 选取当前节点的父节点 |
| @ | 选取属性 |
tree = etree.HTML(html)## 从根节点选取
data1 = tree.xpath('/html')
print('从根节点选取:',data1)## 取head下title的值
data2 = tree.xpath('/html/head/title/text()')
print('取head下title的值:',data2)## 取子孙节点值
data3 = tree.xpath('//p/text()')
print('取子孙节点值为:',data3)## 选取当前节点值
all_p = tree.xpath('//p')
for p in all_p:print('选取当前节点:',p.xpath('.')) # 获取值话:./text()print('选取当前节点父节点:',p.xpath('..'))## 获取html,lang属性
attr = tree.xpath('/html/@lang')
print('获取html,lang属性:',attr)## 获取所有href的属性
href = tree.xpath('//@href')
print('获取所有href的属性:',href)
从根节点选取: [<Element html at 0x105346cc0>]取head下title的值: ['示例网页']取子孙节点值为: ['这是一个简单的HTML页面,用于演示XPath解析。', '这是一段内容。', '这是另一段内容。']选取当前节点: [<Element p at 0x1055d1f40>]选取当前节点父节点: [<Element body at 0x1055d90c0>]选取当前节点: [<Element p at 0x1055d9040>]选取当前节点父节点: [<Element div at 0x1055d90c0>]选取当前节点: [<Element p at 0x1055d9080>]选取当前节点父节点: [<Element div at 0x1055d90c0>]获取html,lang属性: ['zh']获取所有href的属性: ['https://www.example.com/page1', 'https://www.example.com/page2', 'https://www.example.com/page3']
条件选择基本语法
1. 选取属于ul子元素的第一个li元素的a 值,这里从 1 开始
tree.xpath('/html/body/ul/li[1]/a/text()')
2. 选取属于ul子元素的最后一个li元素的a 值
tree.xpath('/html/body/ul/li[last()]/a/text()')
3. 选取属于ul子元素的倒数第二个li元素的a 值
tree.xpath('/html/body/ul/li[last()-1]/a/text()')
4. 选取所有拥有名为 href 的属性的 a 元素
tree.xpath('//a[@href]')
5. 选取所有拥有名为 id=content 的属性的 div 元素
tree.xpath('//div[@id="content"]')
6. 选取 ul 元素的所有 li 元素,且其中的 a 元素的值须为 链接2,如果是数值可以比大小运算
tree.xpath('/html/body/ul/li[a="链接2"]')
选取属于ul子元素的第一个li元素a值: ['链接1']选取属于ul子元素的最后一个li元素a值: ['链接3']选取属于ul子元素的最后一个li元素a值: ['链接2']选取所有拥有名为 href 的属性的 a 元素: [<Element a at 0x1026460c0>, <Element a at 0x102646140>, <Element a at 0x1026461c0>]选取所有拥有名为 id=content 的属性的 div 元素: [<Element div at 0x102646240>]选取 ul 元素的所有 li 元素,且其中的 a 元素的值须为 链接2: ['链接2']
通配符与运算选择基本语法
1. 选取 html 元素的所有子元素
tree.xpath('/html/*')
2. 选取文档中的所有元素
tree.xpath('//*')
3. 选取所有带有属性的 a 元素
tree.xpath('//a[@*]')
4. 选取 body 元素的所有 h1 和 p 元素
tree.xpath('//body/h1 | //body/p')
5. 选取文档中的所有 h1 和 p 元素
tree.xpath('//h1 | //p')
选取 html 元素的所有子元素: [<Element head at 0x1054de480>, <Element body at 0x1054de100>]选取文档中的所有元素: [<Element html at 0x10518ee40>, <Element head at 0x1054de040>, <Element meta at 0x1054de440>, <Element title at 0x1054de180>, <Element body at 0x1054de4c0>, <Element h1 at 0x1054de540>, <Element p at 0x1054de140>, <Element ul at 0x1054de580>, <Element li at 0x1054de5c0>, <Element a at 0x1054de300>, <Element li at 0x1054de500>, <Element a at 0x1054de380>, <Element li at 0x1054de600>, <Element a at 0x1054de400>, <Element div at 0x1054de640>, <Element h2 at 0x1054de680>, <Element p at 0x1054de200>, <Element p at 0x1054de240>]选取所有带有属性的 a 元素: [<Element a at 0x1054de300>, <Element a at 0x1054de380>, <Element a at 0x1054de400>]选取 body 元素的所有 h1 和 p 元素: [<Element h1 at 0x1054de4c0>, <Element p at 0x1054de140>]选取文档中的所有 h1 和 p 元素: [<Element h1 at 0x1054de440>, <Element p at 0x1054de140>, <Element p at 0x1054de200>, <Element p at 0x1054de240>]相关文章:
Python爬虫:XPath基本语法
XPath(XML Path Language)是一种用于在XML文档中定位元素的语言。它使用路径表达式来选择节点或节点集,类似于文件系统中的路径表达式。 不啰嗦,讲究使用,直接上案例。 导入 pip3 install lxmlfrom lxml import etr…...
UML/SysML建模工具更新情况(截至2024年1月)(1)UModel 2024
最近一段时间更新的工具有: 工具最新版本:Umple 1.33.0 更新时间:2024年1月10日 工具简介 自称“Model-Oriented Programming”,把图形和文本结合起来,支持Java、PHP和Ruby代码生成,可以在线使用…...
ubuntu20-github不通问题
github不通 一直在github下载失败 Git报错fatal unable to connect to github.com: github.com[0: 20.205.243.166] >>> alsa-ucm-conf v1.2.6.3 Downloading(卡在这里,很烦啊) 然后搜了很多文档,然后以下操作: 1.GitHub.com - GitHub: Lets build from here Git…...
【MAC】Multi-Level Monte Carlo Actor-Critic阅读笔记
基本思想: 利用多层次蒙特卡洛方法(Multi-Level Monte Carlo,MLMC)和Actor-Critic算法,解决平均奖励强化学习中的快速混合问题。 快速混合? 在强化学习中,当我们说一个策略"混合得快"…...
[GN] 设计模式—— 创建型模式
文章目录 创建型模式单例模式 -- 确保对象唯一性例子优化饿汉式懒汉式 优缺点使用场景 简单工厂模式例子:优化优缺点适用场景 工厂方法模式 -- 多态工厂的实现例子优缺点优化适用场景 抽象工厂模式 -- 产品族的创建例子优缺点适用场景 总结 创建型模式 单例模式 –…...
链表——超详细
一、无头单向非循环链表 1.结构(两个部分): typedef int SLTDataType; typedef struct SListNode {SLTDataType data;//数据域struct SListNode* next;//指针域 }SLNode; 它只有一个数字域和一个指针域,里面数据域就是所存放的…...
【刷题】 leetcode 面试题 08.05.递归乘法
递归乘法 1 题目描述2 思路一(返璞归真版)3 思路二(二进制乘法器版)4 思路三(变态版)Thanks♪(・ω・)ノ谢谢阅读下一篇文章见!!! 1 题目…...
C语言实现希尔排序算法(附带源代码)
希尔排序 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高࿰…...
R语言【taxlist】——subset():取taxlist对象的子集
Package taxlist version 0.2.4 Description taxlist对象的子集将通过逻辑操作或模式匹配来完成。子集可以引用包含在插槽taxonNames、taxonRelations或taxonTraits中的信息。 Usage ## S4 method for signature taxlist subset(x,subset,slot "names",keep_child…...
单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇2)
目录 T1工作在方式2时 T0工作在方式3时 四种工作方式的总结 定时计数器对输入信号的要求 定时计数器对的编程的一个要求 关于初值计算的问题 4种工作方式的最大定时时间的大小 关于编程方式的问题 实例分析 实例1 实例2 T1工作在方式2时 51单片机,有两个…...
《动手学深度学习(PyTorch版)》笔记4.1
注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过。…...
OpenAI发布新模型!ChatGPT性能重磅提升,API大幅降价,GPT-4 「变懒」被修复
OpenAI 对ChatGPT进行了大更新:推出了新一代的嵌入模型,对GPT-4 Turbo模型进行了更新,并将很快对GPT-3.5 Turbo的API进行大幅降价,GPT-4「变懒」行为也被修复。 接下来二狗就带大家看看ChatGPT的这次详细更新。 推出新的嵌入模型…...
【C深度解剖】计算机数据下载和删除原理
简介:本系列博客为C深度解剖系列内容,以某个点为中心进行相关详细拓展 适宜人群:已大体了解C语法同学 作者留言:本博客相关内容如需转载请注明出处,本人学疏才浅,难免存在些许错误,望留言指正 作…...
ASTORS国土安全奖:ManageEngine AD360荣获银奖
美国安全今日(AST)的年度“ASTORS”国土安全奖计划是一个备受瞩目的活动,致力于突显国土安全领域的创新与进步。这一奖项旨在表彰在保护国家免受安全威胁方面做出卓越贡献的个人和组织。该计划汇聚了执法、公共安全和行业领袖,不仅…...
clang--cpplint--gitlint
clang_format clang_format是什么 代码格式化工具 clang_format 官网和官网教程 中文教程 下载 sudo apt install clang sudo apt install clang-format#查看下载是否成功 clang --version 代码的构建到提交的过程: cmake .. make make test make clang_f…...
Web开发8:前后端分离开发
在现代的 Web 开发中,前后端分离开发已经成为了一种常见的架构模式。它的优势在于前端和后端可以独立开发,互不干扰,同时也提供了更好的可扩展性和灵活性。本篇博客将介绍前后端分离开发的概念、优势以及如何实现。 什么是前后端分离开发&am…...
基于 java+springboot+mybatis电影售票网站管理系统前台+后台设计和实现
基于 javaspringbootmybatis电影售票网站管理系统前台后台设计和实现 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承…...
【INTEL(ALTERA)】错误:*.onchip_flash_0:UFM 扇区不支持“隐藏”模式。请更新访问模式设置
说明 由于英特尔 Quartus Prime Standard Edition 软件版本 22.1 存在一个问题,当您针对 10 FPGA Compact 变体英特尔 MAX在片上闪存英特尔 FPGA IP中选择单压缩映像配置模式时,可能会出现以下错误消息。 错误:*.onchip_flash_0:…...
备战蓝桥杯---数据结构与STL应用(基础3)
今天我们主要介绍的是pair,string,set,map pair:我们可以把它当作一个结构体: void solve(){pair<int int> a;//创建amake_pair(1,2);//添加元素cout<<a.first<<endl<<a.second<<endl;}//输出 当然,它也可以嵌套&#…...
「优选算法刷题」:只出现一次的数字Ⅲ
一、题目 给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。 你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。 示例 1: …...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
