xpath语法详解
当涉及到网页抓取和解析HTML/XML文档时,XPath是一种强大的定位和提取数据的工具。XPath(XML Path Language)是一种在XML文档中定位节点的语言。下面是一些关于XPath的详细解释和案例:
基本介绍
1. XPath基础
XPath的基本语法如下:
/ # 从根节点开始
// # 选择匹配的任何位置
. # 当前节点
.. # 父节点
@ # 选择属性
[node] # 选取所有node子元素
[@attr] # 选取带有attr属性的所有元素
2. 选取节点
使用XPath选取节点,例如:
//div # 选择所有div元素
//div[@class] # 选择带有class属性的div元素
//div[@id='myId'] # 选择id属性为'myId'的div元素
3. 路径表达式
XPath使用路径表达式来选取节点。例如:
//div/p # 选择所有div下的p元素
//div//p # 选择所有div下的所有p元素
4. 谓词
XPath中的谓词用于过滤节点。例如:
//div[@class='highlight'] # 选择class属性为'highlight'的div元素
//ul/li[position()<3] # 选择ul下的前两个li元素
5. 通配符
使用通配符匹配元素,例如:
//* # 选择所有元素
//div/* # 选择所有div下的所有子元素
6. 文本提取
使用XPath提取文本内容,例如:
//p/text() # 提取p元素的文本内容
7. 示例案例
考虑以下HTML片段:
<html>
<body>
<div id="content">
<p class="intro">Hello, <b>world</b>!</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</div>
</body>
</html>
对应的XPath表达式:
- 提取文本:“//p/text()” -> 输出:“Hello, world!”
- 选择所有li元素:“//ul/li” -> 输出:[“Item 1”, “Item 2”]
- 选择id为’content’的div下的p元素:“//div[@id=‘content’]/p” -> 输出:[“Hello, world!”]
以上是XPath的一些基础和常用操作,希望这些例子能够帮助你更好地理解和使用XPath。
谓词进阶
当使用XPath时,谓词是一种用于过滤节点的表达式。谓词用于在路径中添加条件,以选择满足特定条件的节点。以下是关于XPath谓词的详细解释和案例:
1. 谓词基础
谓词的基本语法是在方括号中放置条件表达式。例如:
//div[@class='highlight'] # 选择class属性为'highlight'的div元素
2. 比较运算符
在谓词中可以使用比较运算符,例如:
//p[@id='para1'] # 选择id属性为'para1'的p元素
//a[@href!='#'] # 选择href属性不等于'#'的a元素
//input[@type='text' and @name='username'] # 选择type为'text'且name为'username'的input元素
3. 位置谓词
位置谓词用于选择特定位置的节点。例如:
//ul/li[1] # 选择ul下的第一个li元素
//div[@class='article']/p[position()=last()] # 选择class为'article'的div下的最后一个p元素
4. 范围谓词
范围谓词用于选择一定范围内的节点。例如:
//div[@id='content']/p[position()>1 and position()<4] # 选择id为'content'的div下的第2到第3个p元素
5. 使用逻辑运算符
逻辑运算符(and、or、not)可用于组合多个条件。例如:
//input[@type='text' and (@name='username' or @name='email')] # 选择type为'text'且name为'username'或'name'为'email'的input元素
6. 使用函数
XPath还提供一些内置函数,如contains()
、starts-with()
等,用于进行更复杂的条件判断。例如:
//a[contains(@href, 'example.com')] # 选择href属性包含'example.com'的a元素
//h2[starts-with(@class, 'header')] # 选择class属性以'header'开头的h2元素
以上是关于XPath谓词的详细解释和案例。通过理解和熟练使用谓词,你可以更精确地定位和提取文档中的数据。