You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Xpath仅提取标签中的数字?现有代码返回含字符列表

仅用Xpath提取数字的解决方案

根据你使用的Xpath版本,有两种可行的处理方式:

Xpath 1.0 环境(主流Python解析库如lxml默认使用)

Xpath 1.0没有原生正则支持,可通过两种方式实现数字提取:

方式1:嵌套translate函数过滤非数字

利用translate的特性,先提取所有非数字字符,再将这些字符从原字符串中移除:

hots = html.xpath('translate(//*[@id="pl_top_realtimehot"]/table/tbody/tr/td[2]/span/text(), translate(//*[@id="pl_top_realtimehot"]/table/tbody/tr/td[2]/span/text(), "0123456789", ""), "")')[1:]
  • 内层translate:把原字符串中的数字全部替换为空,得到所有非数字字符集合
  • 外层translate:把原字符串中的这些非数字字符全部移除,最终只保留数字

方式2:Xpath提取后用Python过滤(更简洁易维护)

如果觉得Xpath写法过于繁琐,更推荐先提取原始内容,再用Python代码过滤数字:

# 先获取原始列表
hots_raw = html.xpath('//*[@id="pl_top_realtimehot"]/table/tbody/tr/td[2]/span/text()')[1:]

# 方法A:遍历字符筛选数字
hots = [''.join([c for c in item if c.isdigit()]) for item in hots_raw]

# 方法B:用正则替换非数字字符
import re
hots = [re.sub(r'\D', '', item) for item in hots_raw]

Xpath 2.0+ 环境(如使用Saxon等支持高版本Xpath的解析器)

Xpath 2.0及以上支持正则表达式,可直接用replace函数一键替换非数字内容:

hots = html.xpath('replace(//*[@id="pl_top_realtimehot"]/table/tbody/tr/td[2]/span/text(), "\D", "")')[1:]

内容的提问来源于stack exchange,提问作者XXXten6b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:35:19