一文搞懂 XPath 定位

一文搞懂 XPath 定位
最新回答
与可爱私奔

2024-02-01 23:04:22

XPath(XML Path Language)是一种用于在XML文档中查找信息的语言,广泛应用于爬虫和自动化测试中。通过路径表达式,XPath可以高效地选取XML文档中的节点或节点集。以下是关于XPath定位的详细解析:

一、XPath基础
  1. XPath定义:XPath是一种在XML文档中查找信息的语言,用于遍历XML文档中的元素和属性。
  2. XPath应用:在爬虫和自动化测试中,XPath通过路径表达式选取节点或节点集,提高数据提取效率。
  3. HTML结构:学习XPath前,需了解HTML的结构及常用标签,如标题(<h1>-<h6>、<title>)、段落(<p>)、链接(<a>)等。更多HTML学习可参考
    W3School文档
二、XPath表达式
  1. 基本表达式

    nodename:选取此节点的所有子节点。

    /:从根节点选取。

    //:从匹配选择的当前节点选择文档中的节点,不考虑位置。

    .:选取当前节点。

    ..:选取当前节点的父节点。

    @:选取属性。

  2. 常用案例

    //title:选取所有<title>元素。

    //div[@class='example']:选取所有class属性为example的<div>元素。

    //a[@href='

    https://example.com'
    ]:选取所有href属性为
    https://example.com
    的<a>元素。

  3. 谓语表达式

    谓语用于查找特定节点或包含指定值的节点,嵌在方括号中。

    示例:

    //book[1]:选取第一个<book>元素。

    //book[price>35.00]:选取所有价格大于35.00的<book>元素。

  4. 通配符

    *:匹配任何元素节点。

    @*:匹配任何属性节点。

    node():匹配任何类型的节点。

三、XPath定位方式
  1. 元素属性定位

    快速定位唯一属性,如//*[@id="images"]。

  2. 层级与属性结合

    解决没有属性问题,如//div[@id="images"]/a[1]。

  3. 属性与逻辑结合

    解决多个属性重名问题,如//*[@id="su" and @class="bg s_btn"]。

  4. 特殊定位方式

    查找id属性包含特定字符串的元素,如//*[contains(@id,'kw')]。

    查找文本包含特定字符串的元素,如//*[contains(text(),'新闻')]。

    查找class属性以特定字符串开头的元素,如//*[starts-with(@class,'s_form_wrapper')]。

    使用多个相对路径定位元素,如//div[@class='formgroup']//input[@id='user-message']。

  5. 轴定位

    使用::表示轴关系,如//*[@id="head"]//following::input[1]查找id="head"元素后的第一个<input>元素。

四、浏览器中查找和验证XPath
  1. 使用Chrome开发者工具

    点击选择光标,选择页面元素,右键选择“Copy XPath”复制表达式。

    示例:获取到的XPath路径可能为//*[@id="su"],full XPath可能为/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input。

  2. 验证表达式

    按“Ctrl+F”在控制台中输入XPath路径,对应元素会有颜色标识。

五、注意事项
  • 表达式中的下标从1开始。
  • 绝对定位以/开头,依赖页面元素顺序和位置;相对定位以//开头,不依赖页面元素顺序和位置,优先使用相对定位。

通过掌握这些XPath表达式的技巧,可以高效地在XML或HTML文档中定位和提取所需数据。