在XPath中,last()是一个内置函数,返回当前上下文节点集中最后一个节点的位置序号。把它放在方括号谓语里,就能精准选中最后一个节点或倒数第几个节点,常用于列表抓取和动态内容解析。

last()函数基础语法
last()必须写在谓语的方括号中,代表当前节点集合的长度。下面是最简单的用法:
<!-- 示例XML --> <ul> <li>第一项</li> <li>第二项</li> <li>第三项</li> </ul>
若要选取最后一个li,XPath写法为:
//ul/li[last()]
该表达式先找到所有ul下的li,再从中取位置等于last()的那个节点。
选取倒数第N个节点
last()可以参与算术运算。例如取倒数第二个li:
//ul/li[last()-1]
若列表有3个li,last()为3,last()-1等于2,于是选中第二个li。
在属性与嵌套结构中使用
last()也适用于属性节点或更深层级。比如取每个div中最后一个p的文本:
//div/p[last()]
如果只想拿页面中最后一个具有class属性的a标签:
//a[@class][last()]
last()与位置谓词的差异
直接用数字谓语是从头数,last()是从尾数。对比见下表:
| 表达式 | 含义 |
|---|---|
| //li[1] | 第一个li |
| //li[last()] | 最后一个li |
| //li[position()=last()] | 同last(),写法更啰嗦 |
代码示例:用Python解析
下面用lxml演示如何调用last():
from lxml import etree
html = """
<ul>
<li>一</li>
<li>二</li>
<li>三</li>
</ul>
"""
tree = etree.HTML(html)
# 选最后一个li
last_li = tree.xpath('//ul/li[last()]/text()')
print(last_li) # 输出 ['三']
常见错误提醒
- 不要把last()写成标签,例如误用<last>,它只是函数。
- last()不能单独用,必须放在谓语方括号内。
- 在for循环里动态拼路径时,注意括号和引号转义。
熟练使用last()能让XPath规则更简洁,尤其在未知长度的列表中抓取尾部数据非常好用。