当前位置:首页>python>Python开发从零开始-45.1-使用 XPath

Python开发从零开始-45.1-使用 XPath

  • 2026-10-11 05:38:00
Python开发从零开始-45.1-使用 XPath

在Python中,使用 XPath 是一种非常流行的技术,用于解析和查询 XML 或 HTML 文档。本文小编与大家分享 Python 使用 XPath 的相关知识。

一、XPath 简介

(一)什么是 XPath

XPath (XML Path Language,XML 路径语言)是用来在 XML 或 HTML 文档里精准定位元素的查询语言‌,就像给文档里的每个内容标上地址,让程序能快速找到想要的信息。它属于 W3C 国际标准,广泛应用于数据提取、网页爬虫和自动化测试等领域。‌‌XPath 通常念作"X Path"(字母 X 加单词 Path)

(二)XPath 术语

1、节点

节点(Node)是 XPath 的术语。

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。

2、基本值(或称原子值,Atomic value)

基本值是无父或无子的节点。例如:文本内容元素。

3、项目(Item)

项目是基本值或节点。

(三)节点间的关系

节点间的关系包括:父、子、兄弟、先辈(父、爷等,直至鼻祖)、后代(子、孙等,直至耳孙)几种。

(四)XPath 语法

1、选取节点

XPath 使用路径表达式来选取 XML 或 HTML 文档中的节点或者节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。这些路径表达式和电脑文件系统中的路径表达式(使用斜杠 / 分层)非常相似。

XPath 常用路径表达式如下所示:

  • / :绝对路径,从根节点开始选取。例如: /root 表示选取 root 根节点, /root/book 表示选取 root 根节点的所有 book 子元素节点;

  • // :相对路径,从任意位置开始选取。例如: //book 表示选取文档中的所有 book 元素节点;

  • . :选取当前节点;

  • .. :选取当前节点的父节点;

  • @ :选取属性。例如://book@name 表示选取文档中所有带 name 属性的 book 元素节点。

2、谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定值的节点。谓语被嵌在方括号中成为 XPath 路径表达式的组成,通常针对位置、属性和指定值等进行筛选过滤。常见带谓语的 XPath 路径表达式如下所示:

  • /bookstore/book[1]:选取属于 bookstore 子元素的第一个 book 元素;

  • /bookstore/book[last()]:选取属于 bookstore 子元素的最后一个 book 元素;

  • /bookstore/book[last()-1]:选取属于 bookstore 子元素的倒数第二个 book 元素;

  • /bookstore/book[position()<3]:选取最前面的两个属于 bookstore 元素的子元素的 book 元素;

  • //title[@lang]:选取所有拥有名为 lang 的属性的 title 元素;

  • //title[@lang='eng']:选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性;

  • /bookstore/book[price>40.00]:选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 40.00;

  • /bookstore/book[price>40.00]//title:选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 40.00。

3、选取未知节点

可以使用 XPath 的通配符来选取未知的文档节点。这些通配符含义如下所示:

  • * :匹配任何元素节点。例如:/bookstore/* 选取 bookstore 元素的所有子元素;

  • @* :匹配任何属性节点。例如://* 选取文档中的所有元素;

  • node() :匹配任何类型的节点。例如://title[@*] 选取所有带有属性的 title 元素。

4、选取多个路径

通过在路径表达式中使用"|"运算符,可以选取若干个路径。常见选取多个路径的 XPath 路径表达式如下所示:

  • //book/title | //book/price:选取 book 元素的所有 title 和 price 元素;

  • //title | //price:选取文档中的所有 title 和 price 元素;

  • /bookstore/book/title | //price:选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。

受文章篇幅所限,下文将继续介绍 Python 使用 XPath 的相关知识。

最新文章

随机文章