17370845950

XPath如何选取属性 XPath选取节点属性值方法
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() 强制转为单个字符串,避免节点集