Xpath语法规则的学习和使用

XPath 语法规则

XPath 是在 XML/HTML 文档中定位节点 的查询语言,也是爬虫、Selenium 自动化最常用的定位方式。经学习,整理了最实用、最常用 的语法,直接按这套就能用。

一、基础选择语法

|--------------------------------|--------------------------|
| 表达式 | 作用 |
| / | 从根节点开始选取(绝对路径 ) |
| // | 从任意位置选取节点(相对路径 ,最常用) |
| . | 选取当前节点 |
| .. | 选取父节点 |
| @ | 选取属性 |
| * | 匹配任意节点 |
| @* | 匹配任意属性 |
| Text() | 匹配元素的文本内容 |
| Node() | 匹配任意类型的节点 |
| | | 管道符同时选择多个元素 |
| @attribute='value' | 匹配具有指定属性值的元素 |

xpath 示例 :

|-----------------------------------------------------------------|
| //div # 选取所有div节点 //div/* # 选取所有div的子节点 //@class # 选取所有class属性 |

二、节点筛选(谓语

给节点加筛选条件,精准定位。

(1) 按位置筛选:

|------------------------------------------------------------------------------------------------------------|
| //div1 # 第一个div //divlast() # 最后一个div //divlast()-1 # 倒数第二个div //divposition()\<3 # 前2个div |

(2)按属性筛选(最常用):

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| //div@id="content" # id等于content的div //div@class="item" # class等于item的div //a@href # 包含href属性的a标签 //divcontains(@class,"list") # class包含list的div(模糊匹配) //divstarts-with(@id,"test") # id以test开头的div //div@id="a" and @class="b" # 多条件同时满足 //div@id="a" or @id="b" # 满足任一条件 |

(3)按文本内容筛选:

|-------------------------------------------------------------------------------|
| //divtext()="hello" # 文本完全等于hello //divcontains(text(),"你好") # 文本包含你好 |

三、轴语法(节点关系定位)

轴可以找父、子、兄、弟、祖先、后代等关联节点。

|-----------------------|------------------------|
| 轴名称 | 作用 |
| child::* | 选取当前节点的所有子元素 |
| parent::* | 选取父节点 |
| following-sibling::* | 选取后面的所有同级兄弟 |
| preceding-sibling::* | 选取前面的所有同级兄弟 |
| ancestor::* | 选取所有祖先节点 (父、祖父...) |
| descendant::* | 选取所有后代节点 (子、孙子...) |

xpath 示例 :

|--------------------------------------------------------------------|
| //div@id="a"/following-sibling::div1 # 找到id=a的div的下一个兄弟div |

四、运算符

|-------------|------------|
| 运算符 | 作用 |
| = | 等于 |
| != | 不等于 |
| < / > | 小于 / 大于 |
| and / or | 逻辑与 / 或 |
| + - * div | 算术运算 |

五、实用高频写法

1. 精准id

//*@id="username"

2. 模糊class

//divcontains(@class,"btn-primary")

3. 多class匹配(解决class有多个值的问题)

//divcontains(@class,"class1") and contains(@class,"class2")

4. 文本定位

//spantext()="登录"

5. 包含文本

//buttoncontains(text(),"提交")

6. 取父节点

//span/..

7. 取兄弟节点

//div@class="current"/following-sibling::div1

六、注意事项

  1. 属性值区分大小写
  2. HTML 里的 class 是多值属性,尽量用 contains 不要直接用 =
  3. 索引从 1 开始 ,不是 0
  4. 尽量用 // 相对定位,不要写太长的绝对路径

七、 总结

  1. 基础://节点@属性="值" 是万能定位公式
  2. 模糊匹配:contains()、starts-with()
  3. 关系定位:parent、following-sibling
  4. 文本定位:text()、contains(text(),"xxx")
  5. 附件:XPath 语法规则.pdf
    链接: https://pan.baidu.com/s/1lkdCBqUCq2RFRezBArfbTg?pwd=i5vx 提取码: i5vx
相关推荐
烂蜻蜓2 分钟前
Flask入门教程(十二):表单处理——从基础到Flask-WTF完整实践
后端·python·flask
jay神19 分钟前
【计算机毕业设计】基于Flask+Vue的电影数据可视化与智能推荐系统
前端·vue.js·python·信息可视化·flask·毕业设计·课程设计
满怀冰雪1 小时前
24-PaddleClas 模型评估、导出与推理部署入门
大数据·人工智能·python·深度学习·paddle
DeepVisionary7 小时前
谷歌 Gemini Omni 1.1 Flash 正式发布:4K 视频、40 秒场景延伸,视频生成进入按 token 计费时代
python·自动化
阡之尘埃7 小时前
Python数据分析案例85——大模型微调全流程(SFT的LoRA微调)
人工智能·python·深度学习·语言模型·llm·微调·千问
海兰7 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(三)
javascript·python·金融
cvcode_study7 小时前
Ollama+ComfyUI 多模态
大数据·人工智能·python
小磊哥er9 小时前
深入解构Claude Code - 第 7 篇 · 连接外面的世界
javascript·ai编程
星核0penstarry9 小时前
试一试用gr.Workflow把AI多步骤串联变成可视化画布
人工智能·python·ai作画·api·ai编程·工作流·api聚合平台
taller_20009 小时前
【005】PiE 与传统 VBA 的核心区别
python·vba·pie·py