python3学习-lxml模块
在爬虫的学习中,我们爬取网页信息之后就是对信息项匹配,这个时候一般是使用正则。但是在使用中发现正则写的不好的时候不能精确匹配(这其实是自己的问题!)所以就找啊找。想到了可以通过标签来进行精确匹配岂不是比正则要快。所以找到了lxml。
因为lxml是对xml格式的解析,支持html格式,而对于xml格式的解析有一门专用的语言,XPath。XPath用于在xml文档中通过元素和属性进行导航。lxml库也是解析xml文件,所以也应用了XPath语法。我们先学习一下XPath 的标准语法,然后将这些语法知识应用到lxml之中。
大家应该对xml或者是html都不陌生,默认大家都知道,所以就简单介绍。
节点关系
父子节点(Parent children)
<div class="all">
<div class="sub"></div>
</div>
无需解释。
兄弟节点(sibling)
<div class="all">
<div class="sibling"></div>
<div class="sibling"></div>
</div>
无需解释。
先辈(Ancestor)后代(Descendant)
<div class="grandpa">
<div class="all">
<div class="sibling"></div>
<div class="sibling"></div>
</div>
</div>
节点选择
表达式 | 描述 |
nodename | 选取此节点的所有子节点 |
/ | 此路径运算符出现在模式开头时,表示应从根节点选择 |
// | 从当前节点开始递归下降,此路径运算符出现在模式开头时,表示应从根节点递归下降。 |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性 |
* | 通配符.选择所有元素节点与元素名无关 |
@ | 选取属性 |
@* | 选取所有属性 |
: | 命名空间分隔符;将命名空间前缀与元素名或属性名分隔 |
() | 括号运算符(优先级最高),强制运算优先级 |
[] | 应用筛选模式(即谓词,包括”过滤表达式”和”轴(向前/向后)”) |
| | 两个节点集合的联合,eg:/div/a | //div/span |
@ | 选取属性 |
匹配未知节点
通配符 | 描述 |
* | 匹配任何节点 |
@* | 匹配任何属性节点 |
node() | 匹配任何类型的节点 |
实例
下面我们通过一些例子看一下谓词+表达式的综合:
路径表达式 | 结果 |
/node() | 根元素下所有的节点(包括文本节点,注释节点等) |
/text() | 查找文档根节点下的所有文本节点 |
/div/a[1] | 选取属于div的第一个a元素 |
/div/a[1] | 选取属于div的第一个a元素 |
/div/a[last()] | 选取属于div的子元素中倒数第一个a元素 |
/div/a[last()-1] | 选取属于div的子元素中倒数第二个a元素 |
/div/a[position() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构