python之xpath讲解

简介: python之xpath讲解

在 Python 采集领域,正则表达式到底要学多深?同理,XPath 表达式要学多少才够用?这两个问题是很多新人的疑问,而且这两个问题还没有标准答案……

 

本篇博客为你梳理,在初学阶段,二者你应该学到何种地步,给你定一个小目标,即初学的

范围。


正则表达式

正则表达式在 Python 中,主要配合 re 模块使用,该模块应用难度不大,但正则表达式编写却困扰很多朋友。


正则难写的原因如下:



1.它也算是一门独立的编程语言,有自己的规范;


2.正则表达式独立于任何编程语言,也表示它可以和任意编程语言结合;


3.每个人写出的表达式不一致,即“每题”的答案都不唯一;


4.正则有语法,有修饰符,有元字符,有运算符的优先级,初学阶段概念有点庞杂,无从下手。



既然已经分析到正则难写的原因,那接下来逐一克服即可。



首先要明确第一个概念,正则是干什么的?



简单理解,正则表达式就是一种文本(字符串)的检索模式,它可以从一个长字符串中,匹配出目标字符串。



例如从 abc1234dfertg 中提取 1234。


初学正则

初学阶段,上来要做的事情是了解正则的基本语法,从字符开始进行学习。



普通字符这个是非常简单的,例如 a,1 就是一个普通字符,应用到正则表达式里面,就可以去匹配指定字符串的 a 或者 1。



顺着字符就扩展出来正则的核心内容了,元字符。



元字符元字符就是,在正则中有特殊的含义的一些语法表述。



常见的元字符如下:



\d:匹配一个数字;


\w:匹配字母、数字、下划线;



这里就会出现一个学习阶段的门槛,记忆元字符。



在初学阶段,尤其是初学 Python 采集阶段,那按照如下顺序记忆即可(必须掌握)。



.:匹配除换行符(\n、\r)之外的任何单个字符,一般比较简单的正则用 . 能匹配大多数内容了;


*:匹配前面的表达式 0 次~无限次;


+:匹配前面的表达式 1 次~无限次;


?:匹配前面的子表达式 0 次或 1 次,这个 ? 还有一个用途为【当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的,非贪婪模式表示尽可能少的匹配所搜索的字符串】,这个有点绕,后文有参考案例;


\:转义符,例如你想要匹配 .,需要用 \.;


\s:注意是小写 s,匹配任何空白字符,包括空格、制表符、换页符等等,在解析 HTML 的时候,很常用,因为网页源码中经常出现换行情况;


[xyz]:匹配中框好中的任意一个字符;


(pattern):分组,并匹配出 pattern;


掌握并熟练的使用以上 8 个元字符,在初学爬虫阶段,一般的网页就能畅通无阻的进行解析了。


解释一下贪婪模式。


如果存在一个字符串为 www.csdn.com,你编写了正则如下:w+,此时能匹配到 www,该正则会尽可能多的去匹配 w 字符,当修改正则为:w+? 时,匹配到的结果为 w,即尽可能少的匹配,也就是 元字符 ? 使得正则变为了非贪婪模式。


初学正则在python中的落地

有了上述元字符概念,你在去复盘 120 例之前的正则部分文章,会发现出现过很多次如下正则: (.*?),此时就能理解其含义,并且你也能知道,这是最普通的正则表达式,只能算是偷懒之作,但是写起来确实方便。


如果碰到的网页出现了换行或者空格,那上述正则将演变为 (.|\s)*?,结合上文的必背元字符,你能理解其含义吗?


理解不了去学习就对了,毕竟我们又引入了一个元字符 |,.|\s 表示选择,匹配 . 或 \s,即匹配任意字符在加上空格。


基本的元字符熟悉之后,才能进行更多的扩展,学习其它元字符,使得你的正则表达式写的标准与高效。


除了元字符外,对于正则还需要学习的是修饰符,该内容不多,有如下几种:


i:忽略大小写;


g:全局匹配;


m:多行匹配;


s:. 圆点符号,支持匹配空格。


这些内容不重点讲解的原因是:不同的编程语言有其特殊的实现方式,具体需要依旧语言本身来实现,例如 Python 的 re 模块,就有针对性的实现,你可以去检索 re 模块相关用法。


其余进阶内容,请重点围绕正则分组进行学习,该部分将在后期总结篇展现。


XPath 表达式

XPath 即 XML Path,一种在 XML 文档中查找节点元素的语言。

如果深入研究,XPath 依旧有非常多的知识点需要补充,但是作为初学采集,优先掌握如下内容即可。


初学阶段必会语法

XPath 路径表达式

这个路径与电脑硬盘路径获取基本一致。

先区分好 ///,它们分别表示从根节点选择,或者从任意位置的某个节点进行选择。

例如存在如下 XML 文档,根阶段为 root,其它内容如下所示


<root>
  <book bid="1">
    <author>A</author>
  </book>
  <book bid="2">
    <author>B</author>
  </book>
</root>

例如 /root/book,表示从根节点开始选择 book 节点,如果使用 /book,则无法匹配到任何数据。

使用 //book,则可以匹配到所有 book 元素。

直接使用 book 也可以匹配出所有的 book 节点。

相关文章
|
4月前
|
XML 前端开发 数据格式
三分钟搞定 Python XPath 语法
XPath(XML Path Language)是一种用于在 XML 文档中查找信息的语言。它基于树状结构的 XML 文档,可以通过路径表达式来选取节点或节点集。也常常用来解析 HTML。 如果你是一个前端,对用路径获取元素可能陌生又熟悉。陌生是很多的路径,熟悉的路径上又有熟悉的属性和方法。下面我们就来探究一下 XPath 的魅力。
|
20天前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href=&#39;example.com&#39;]` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。
|
2月前
|
数据采集 XML 数据格式
Python爬虫--xpath
Python爬虫--xpath
26 1
|
6月前
|
XML 数据库 数据格式
Python网络数据抓取(9):XPath
Python网络数据抓取(9):XPath
35 0
|
6月前
|
XML 数据格式 Python
Python使用xpath对解析内容进行数据提取
在前面的文章当中,已经教大家如何去获取我们需要的数据原文内容,今天就介绍一个用于提取所需数据的方法之一xpath。在后续会讲解bs4(beautifulsoup),re正则表达式。
|
6月前
|
XML 数据格式 Python
Python使用xpath对解析内容进行数据提取
今天就介绍一个用于提取所需数据的方法之一xpath。在后续会讲解bs4(beautifulsoup),re正则表达式。
|
7月前
|
数据采集 XML 数据格式
Python爬虫Xpath库详解#4
XPath详解,涉及获取所有节点,子节点,父节点,属性匹配,文本获取,属性获取,按序选择等。【2月更文挑战第13天】
83 0
|
索引 Python
【Python】数据解析—Xpath解析
【Python】数据解析—Xpath解析
71 0
|
数据采集 JSON API
使用Python和XPath解析动态JSON数据
使用Python和XPath解析动态JSON数据
|
Python
Python xpath 入门使用
Python xpath 入门使用
87 0