XPath(XML Path Language)是一种用于在XML文档中定位和选取节点的语言。它常被用于处理XML文档和HTML文档(例如网页解析)。XPath主要用来从结构化的文档中提取数据,配合诸如XSLT、XQuery或编程语言的库(如Python中的lxml
或BeautifulSoup
)一起使用。
路径表达式
/
:根节点。例如,/html
表示HTML文档的根节点。//
:选择所有符合条件的节点,不考虑位置。例如,//div
表示文档中的所有<div>
节点。.
:当前节点。..
:当前节点的父节点。@
:属性。例如,@class
表示节点的class
属性。节点选择
nodeName
:选择指定名称的节点。例如,//a
选择所有<a>
节点。*
:通配符,选择所有节点。例如,//div/*
选择所有<div>
的子节点。@attribute
:选择特定属性。例如,//a[@href]
选择所有带href
属性的<a>
节点。条件表达式(谓语)
[index]
:选取特定位置的节点。例如,//li[1]
选择第一个<li>
节点。[条件]
:通过条件过滤。例如,//div[@class='example']
选择class
属性为example
的<div>
节点。逻辑运算
and
:逻辑与。例如,//a[@href and @title]
选择同时具有href
和title
属性的<a>
节点。or
:逻辑或。not()
:逻辑非。例如,//div[not(@id)]
选择没有id
属性的<div>
节点。函数
text()
:选取节点的文本内容。例如,//p/text()
获取所有段落的文本。contains()
:检查字符串是否包含子串。例如,//a[contains(@href, 'example.com')]
选择链接到example.com
的<a>
节点。starts-with()
:检查字符串是否以特定子串开头。假设有如下HTML代码:
<html>
<body>
<div class="content">
<h1>Title</h1>
<p>This is a paragraph.</p>
<a href="link1.html">Link 1</a>
<a href="link2.html">Link 2</a>
</div>
</body>
</html>
使用XPath提取信息:
<a>
标签://a
class
为content
的<div>
节点://div[@class='content']
<a>
节点的文本://a[1]/text()
href
属性值://a/@href
BeautifulSoup
或Selenium
提取HTML数据。XPath强大且简洁,是处理结构化文档的利器!