XPath用@符号选取属性值,返回字符串;需先定位元素再写@属性名,如//input[@id='kw']/@name;属性无子节点,@class/text()非法;不存在时返回空,多匹配时返回字符串列表。

XPath选取属性,核心是用 @ 符号加属性名。它不选整个属性节点,而是直接获取属性的值(字符串)。
基本语法:用 @ 获取属性值
要提取某个元素的属性值,必须先定位到该元素,再用 @属性名 表达式访问其属性:
-
//input[@id='kw']—— 选中id="kw"的input元素(注意:这是选节点,不是属性值) -
//input[@id='kw']/@name—— 选中该元素的name属性值(返回字符串,如"wd") -
//img/@src—— 选中所有img标签的src属性值(返回多个字符串)
常见属性选取场景
实际使用中,常结合条件筛选后取值:
- 取特定 class 的链接 href:
//a[contains(@class,'btn')]/@href - 取带 title 且非空的图片 alt:
//img[@title and @alt]/@alt - 取第 2 个按钮的 data-id:
(//button)[2]/@data-id
注意事项
属性值始终是字符串类型,即使 HTML 中写的是数字或布尔值(如 data-count="12"),XPath 返回的仍是字符串 "12"。
- 不能对属性节点再加子路径,例如
@class/text()是非法的 —— 属性没有子节点 - 如果属性不存在,表达式结果为空(不会报错)
- 多个匹配时,多数 XPath 引擎(如 lxml、Selenium)默认返回所有匹配的属性值列表
在代码中使用示例(Python + lxml)
实际调用时需注意返回值类型:
-
tree.xpath('//div/@id')→ 返回['header', 'content', 'footer'] -
tree.xpath('string(//input[@name="email"]/@placeholder)')→ 用string()强制转为单个字符串,避免节点集










