XPath语法怎么用 XPath路径表达式入门教程

16次阅读

XPath 是 html/xml 文档中精准定位元素的查询语言,核心为“路径+条件”:用 // 任意层级搜索更健壮,/ 表示绝对路径;优先通过属性(如 @type、@data-testid)而非 class/id 定位;文字内容(text())、位置索引([n])和轴(如 following-sibling)用于唯一区分;调试推荐 chrome 控制台验证,Selenium 中使用 r”” 原始字符串避免转义。

XPath语法怎么用 XPath路径表达式入门教程

XPath 是一种在 HTML 或 XML 文档中精准定位元素的查询语言,用对了,写爬虫自动化脚本就省一半力气。它不依赖 javaScript 渲染,也不靠肉眼找 class,核心就是“路径 + 条件”。掌握几个常用写法,就能覆盖绝大多数定位需求。

从根出发还是全文档搜?分清 / 和 //

这是最基础也最容易混淆的起点:

  • / 表示绝对路径:必须从文档最顶层开始,比如 /html/body/div[1]/h2。一旦网页结构微调(比如加了个 wrapper div),整个表达式就失效。
  • // 表示相对任意层级搜索:跳过中间结构,直接找目标。例如 //h2 找所有 h2 标签,//div//p 找所有 div 内部的 p(无论嵌套几层)。
  • 日常优先用 //,健壮性高;只有在结构极固定、且需唯一性约束时才考虑 /

靠属性精准锁定,别只认 class 和 id

class 名动态、id 带哈希、标签名太泛——光靠标签根本没法稳定定位。属性才是主力:

  • //input[@type='password']:找密码输入框
  • //button[contains(@class, 'primary')]:class 包含 “primary”(适配 class="tuc-19bc10f7-7cd0e8-0 btn primary large tuc-19bc10f7-7cd0e8-0"
  • //*[@data-testid='submit-btn']:用自定义 data 属性,前端常预留这类稳定钩子
  • //img[@alt and not(@src)]:有 alt 但没 src 的图片,适合检测缺失资源

文字内容和位置是最后的“区分器”

当多个元素长得一模一样(比如一

  • ),就得靠内容或顺序来挑出那个唯一的:

    • //a[text()='登录']:文字完全等于“登录”的链接(注意大小写和空格)
    • //span[contains(text(), '总价')]/following-sibling::b:先找到含“总价”的 span,再取它后面同级的 b 标签
    • (//div[@class='card'])[2]:括号不能少!表示“取第 2 个匹配的 div”,否则 //div[@class='card'][2] 含义变成“每个父节点下第 2 个 card 类 div”
    • //tr[td[1]='王五']/td[3]:表格中第一列是“王五”的行,取该行第三列的内容

    调试和避坑小提醒

    写完别急着跑代码,先验证再集成:

    • Chrome 开发者工具 Elements 面板里按 Ctrl+F(Win)或 Cmd+F(mac,直接粘贴 XPath,匹配项会高亮
    • Selenium 中写成 find_element(By.XPATH, r"//div[@data-id='100']"),推荐原始字符串 r"" 避免反斜杠转义问题
    • 属性值含空格或单引号?用双引号包属性值,如 //a[@title="编辑 用户"];反之亦然
    • 避免硬编码索引(如 [3]),优先用文本、属性或语义化条件替代
    text=ZqhQzanResources