XPath用@符号选取属性值,返回字符串;需先定位元素再写@属性名,如//input[@id='kw']/@name;属性无子节点,@class/text()非法;不存在时返回空,多匹配时返回字符串列表。
XPath选取属性,核心是用 @ 符号加属性名。它不选整个属性节点,而是直接获取属性的值(字符串)。
要提取某个元素的属性值,必须先定位到该元素,再用 @属性名 表达式访问其属性:
//input[@id='kw'] —— 选中 id="kw" 的 input 元素(注意:这是选节点,不是属性值)//input[@id='kw']/@name —— 选中该元素的 name 属性值(返回字符串,如 "wd")//img/@src —— 选中所有 img 标签的 src 属性
实际使用中,常结合条件筛选后取值:
//a[contains(@class,'btn')]/@href
//img[@title and @alt]/@alt
(//button)[2]/@data-id
属性值始终是字符串类型,即使 HTML 中写的是数字或布尔值(如 data-count="12"),XPath 返回的仍是字符串 "12"。
@class/text() 是非法的 —— 属性没有子节点实际调用时需注意返回值类型:
tree.xpath('//div/@id') → 返回 ['header', 'content', 'footer']
tree.xpath('string(//input[@name="email"]/@placeholder)') → 用 string() 强制转为单个字符串,避免节点集