XPath 语法规则
XPath 是在 XML/HTML 文档中定位节点 的查询语言,也是爬虫、Selenium 自动化最常用的定位方式。经学习,整理了最实用、最常用 的语法,直接按这套就能用。
一、基础选择语法
|--------------------------------|--------------------------|
| 表达式 | 作用 |
| / | 从根节点开始选取(绝对路径 ) |
| // | 从任意位置选取节点(相对路径 ,最常用) |
| . | 选取当前节点 |
| .. | 选取父节点 |
| @ | 选取属性 |
| * | 匹配任意节点 |
| @* | 匹配任意属性 |
| Text() | 匹配元素的文本内容 |
| Node() | 匹配任意类型的节点 |
| | | 管道符同时选择多个元素 |
| [@attribute='value'] | 匹配具有指定属性值的元素 |
xpath 示例 :
|-----------------------------------------------------------------|
| //div # 选取所有div节点 //div/* # 选取所有div的子节点 //@class # 选取所有class属性 |
二、节点筛选(谓语 [ ])
用 [ ] 给节点加筛选条件,精准定位。
(1) 按位置筛选:
|------------------------------------------------------------------------------------------------------------|
| //div[1] # 第一个div //div[last()] # 最后一个div //div[last()-1] # 倒数第二个div //div[position()<3] # 前2个div |
(2)按属性筛选(最常用):
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| //div[@id="content"] # id等于content的div //div[@class="item"] # class等于item的div //a[@href] # 包含href属性的a标签 //div[contains(@class,"list")] # class包含list的div(模糊匹配) //div[starts-with(@id,"test")] # id以test开头的div //div[@id="a" and @class="b"] # 多条件同时满足 //div[@id="a" or @id="b"] # 满足任一条件 |
(3)按文本内容筛选:
|-------------------------------------------------------------------------------|
| //div[text()="hello"] # 文本完全等于hello //div[contains(text(),"你好")] # 文本包含你好 |
三、轴语法(节点关系定位)
轴可以找父、子、兄、弟、祖先、后代等关联节点。
|-----------------------|------------------------|
| 轴名称 | 作用 |
| child::* | 选取当前节点的所有子元素 |
| parent::* | 选取父节点 |
| following-sibling::* | 选取后面的所有同级兄弟 |
| preceding-sibling::* | 选取前面的所有同级兄弟 |
| ancestor::* | 选取所有祖先节点 (父、祖父...) |
| descendant::* | 选取所有后代节点 (子、孙子...) |
xpath 示例 :
|--------------------------------------------------------------------|
| //div[@id="a"]/following-sibling::div[1] # 找到id=a的div的下一个兄弟div |
四、运算符
|-------------|------------|
| 运算符 | 作用 |
| = | 等于 |
| != | 不等于 |
| < / > | 小于 / 大于 |
| and / or | 逻辑与 / 或 |
| + - * div | 算术运算 |
五、实用高频写法
1. 精准id
//*[@id="username"]
2. 模糊class
//div[contains(@class,"btn-primary")]
3. 多class匹配(解决class有多个值的问题)
//div[contains(@class,"class1") and contains(@class,"class2")]
4. 文本定位
//span[text()="登录"]
5. 包含文本
//button[contains(text(),"提交")]
6. 取父节点
//span/..
7. 取兄弟节点
//div[@class="current"]/following-sibling::div[1]
六、注意事项
- 属性值区分大小写
- HTML 里的 class 是多值属性,尽量用 contains 不要直接用 =
- 索引从 1 开始 ,不是 0
- 尽量用 // 相对定位,不要写太长的绝对路径
七、 总结
- 基础://节点[@属性="值"] 是万能定位公式
- 模糊匹配:contains()、starts-with()
- 关系定位:parent、following-sibling
- 文本定位:text()、contains(text(),"xxx")
- 附件:XPath 语法规则.pdf
链接: https://pan.baidu.com/s/1lkdCBqUCq2RFRezBArfbTg?pwd=i5vx 提取码: i5vx