> 文章列表 > 〖Python网络爬虫实战⑫〗- XPATH语法介绍

〖Python网络爬虫实战⑫〗- XPATH语法介绍

〖Python网络爬虫实战⑫〗- XPATH语法介绍

  • 订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+

                python项目实战

                Python编程基础教程系列(零基础小白搬砖逆袭)

  • 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,可报销(名额有限,先到先得)
  • 作者:爱吃饼干的小白鼠。Python领域优质创作者,2022年度博客新星top100入围,荣获多家平台专家称号。

 最近更新

〖Python网络爬虫实战⑦〗- requests的使用(一)

〖Python网络爬虫实战⑧〗- requests的使用(二)
〖Python网络爬虫实战⑨〗- 正则表达式基本原理

〖Python网络爬虫实战⑩〗- 正则表达式实战(一)
 

〖Python网络爬虫实战⑪〗- 正则表达式实战(二)

上节回顾

前面,我们介绍了关于正则表达式的知识,并且我们在两个实战案例中得到了进一步的提升。下面,我们就向大家介绍网络解析数据的另一个库——XPATH。

⭐️XPATH语法介绍

前面我们实现了一个最基本的爬虫,但提取页面信息时使用的是正则表达式,过程比较烦琐,且万一有地方写错了,可能会导致匹配失败、所以使用正则表达式提取页面信息多少还是有些不方便.

对于网页的节点来说、可以定义id,class或其他属性,而且节点之间还有层次关系,在网页中可以通过XPath或CSS选择器来定位一个或多个节点。那么、在解析页面时,利用XPath或CSS选择器提取某个节点,然后调用相应方法获取该节点的正文内容或者属性,不就可以提取我们想要的任意信息了吗?

🌟1. Xpath 概念

        Xpath,全称 XML Path Language,及XML路径语言,是一门在XML文档中查找信息的语言,最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。

🌟2.常用规则

下表列举了 XPath 的几个常用规则。

  • 获取文本

    表达式 描述
    a/text() 获取 a 下的文本
    a//text() 获取 a 下所有元素的文本
    //a[text()='下一页'] 获取文本为下一页的 a 元素
  • 获取属性
表达式 描述
nodename 选取此节点的所有子节点
/ 从当前节点选取直接子节点
// 从当前节点选取子孙节点
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性
* 匹配任何元素节点
@* 匹配任何属性节点
node() 匹配任何类型的节点

这里列出了 XPath 的常用匹配规则,示例如下:

//title[@lang='eng']

这就是一个 XPath 规则,它代表选择所有名称为 title,同时属性 lang 的值为 eng 的节点。

实例

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

路径表达式 结果
bookstore 选取 bookstore 元素的所有子节点。
/bookstore

选取根元素 bookstore。

注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

bookstore/book 选取属于 bookstore 的子元素的所有 book 元素。
//book 选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang 选取名为 lang 的所有属性。

实例

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式 结果
/bookstore/* 选取 bookstore 元素的所有子元素。
//* 选取文档中的所有元素。
//title[@*] 选取所有带有属性的 title 元素。

🌟3.准备工作

使用之前,首先要确保安装好 lxml 库。如尚未安装,可以使用 pip3 来安装:

pip3 install lxml

🌟4. 实例引入

现在通过实例来感受一下使用 XPath 对网页进行解析的过程,相关代码如下:

from lxml import etree
text = '''
<div><ul><li class="item-0"><a href="link1.html">first item</a></li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-inactive"><a href="link3.html">third item</a></li><li class="item-1"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></ul></div>
'''
html = etree.HTML(text)
result = etree.tostring(html)
print(result.decode('utf-8'))

这段代码使用 Python 的 lxml 库解析一个包含 HTML 内容的字符串,并将其转换为 HTML 字符串。最后,它将 HTML 字符串打印到控制台上。

具体来说,这段代码首先导入了 lxml 库,然后定义了一个包含 HTML 内容的字符串 text。接着,它使用 etree.HTML() 方法将字符串转换为 HTML 字符串,并将其存储在变量 html 中。最后,它使用 etree.tostring() 方法将 HTML 字符串转换为字符串,并将其存储在变量 result 中。最后,它使用 print() 函数将 HTML 字符串打印到控制台上。

需要注意的是,这段代码中使用了 etree.HTML() 方法将字符串转换为 HTML 字符串,这是 lxml 库中的一个方法,它可以将字符串转换为 HTML 格式的字符串。如果你想要将字符串转换为其他格式的字符串,可以使用其他方法,如 etree.tostring() 方法。

🌟总结

本文简单介绍了XPath的语法,本文篇幅有限,也不可能全部介绍完,大家可以弄清楚基本的,从子父节点入手,或者直接开发者工具直接复制。后面,我们将介绍xpath的相关实战,后面我可能更新会慢一些,感谢支持。