如何使用XPath获取https://www.timeanddate.com/weather的最低气温
获取气温最小值的XPath修正方案
需求
从timeanddate天气页面提取气温最小值,原使用的XPath无法正常工作。
原错误XPath
//div/span[@class='my-city__wt']/span[@class='my-city__temp'][not(.>//div/span[@class='my-city__wt']/span[@class='my-city__temp']][1]
问题分析
- 语法错误:表达式末尾缺少闭合括号,导致无法被解析
- 逻辑错误:直接用节点对象做比较,而非将节点文本转为数值后对比,
./>是节点层级比较,不是数值大小比较
正确解决方案
方案1:XPath 2.0及以上(支持min函数)
如果你的工具/环境支持XPath 2.0,可直接用min函数简化操作:
min(//span[@class='my-city__temp']/text())
方案2:XPath 1.0(兼容多数浏览器、爬虫工具)
XPath 1.0不支持min函数,需用逻辑表达式筛选出最小数值的节点:
//span[@class='my-city__temp'][not(//span[@class='my-city__temp'][number(.) > number(current())])]
number(.)将当前节点的气温文本转为数值current()指代当前遍历的my-city__temp节点- 表达式逻辑:筛选出没有其他气温节点数值比它大的节点,即最小值节点
内容的提问来源于stack exchange,提问作者Bhupendra
相关产品推荐
相关产品推荐

