当涉及到网页抓取和解析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谓词的详细解释和案例。通过理解和熟练使用谓词,你可以更精确地定位和提取文档中的数据。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐