📅  最后修改于: 2023-12-03 15:34:25.896000             🧑  作者: Mango
XPath是一种用于在XML文档中进行导航和提取信息的语言。在Python中,XPath解析是非常常见的数据提取方法,也是很多爬虫工具的基础。
Python中有多个XPath解析库可供选择,如lxml、xml.etree.ElementTree和xml.dom等等。这篇文章将介绍最常用的XPath解析库——lxml。
在Python中使用lxml解析XPath前,我们首先需要将其安装。可以使用pip来安装:
pip install lxml
在使用lxml解析XML之前,我们需要先将XML文件读取进来。下面是一个简单的例子:
from lxml import etree
# 读取XML文件
xml_file = 'example.xml'
with open(xml_file, 'r') as f:
xml_string = f.read()
# 解析XML
root = etree.fromstring(xml_string)
XPath表达式是XPath语言的核心,它用于在XML文档中选择节点。XPath表达式可以使用绝对路径或相对路径来选取节点。
如下面是一些XPath表达式的例子:
/bookstore/book
:选取根元素bookstore下的所有book元素。/bookstore/book/title
:选取根元素bookstore下的所有book元素中的title元素。bookstore//title
:选取根元素bookstore下的所有title元素,无论它们在文档中的位置如何。//title
:选取文档中的所有title元素。//book[@category='CHILDREN']
:选取category属性为'CHILDREN'的book元素。//book[@category='CHILDREN']/title
:选取category属性为'CHILDREN'的book元素中的title元素。在解析XPath时,我们可以使用xpath()
方法。该方法返回所选节点的列表。
如下面是一个简单的例子:
# 解析书名
titles = root.xpath('//book/title')
for title in titles:
print(title.text)
在XPath语法中,有一些常见的符号和缩写:
/
:从根节点开始选取。//
:从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。.
:选取当前节点。..
:选取当前节点的父节点。@
:选取属性。[]
:用于属性过滤。|
:选取若干个路径。如下面是一些XPath语法的例子:
//@class
:选取文档中的所有class属性。//p[@class="test"]
:选取所有class属性为"test"的p元素。//p[@class="test" and @id="test_id"]
:选取所有class属性为"test"且id属性为"test_id"的p元素。//p[text()="test_text"]
:选取所有文本为"test_text"的p元素。//p[starts-with(@class, "prefix_")]
:选取所有class属性以"prefix_"开头的p元素。本文介绍了Python中的XPath解析,首先安装了lxml库,然后读取XML文件,使用XPath表达式选取节点,并解析出相应的数据。同时,我们还介绍了XPath语法中的一些重要内容和符号缩写。希望这篇文章可以帮助你了解XPath解析的基本使用方法。