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

如何用Beautiful Soup提取数值并转为整数?(返回为BeautifulSoup对象)

解决从BeautifulSoup提取的pre文本中提取数值并转整数的问题

首先,你现在用find_all('pre')得到的是一个BeautifulSoup对象的列表,所以第一步得先把这些对象里的纯文本内容提取出来,之后再用正则表达式来抓取其中的数值。

步骤1:正确获取pre标签的文本内容

如果你的HTML里只有一个pre标签,直接用find()代替find_all()会更方便,然后调用.text属性拿到文本:

from bs4 import BeautifulSoup
import re

f = open('/home/stats/trade_result.html', 'r')
s = f.read()
soup = BeautifulSoup(s, "lxml")

# 获取单个pre标签的文本
pre_text = soup.find('pre').text
# 如果有多个pre标签,就遍历列表取每个的text
# pre_texts = [pre.text for pre in soup.find_all('pre')]

步骤2:提取数值并转换为整数

接下来用正则表达式匹配所有的正负数值(包括整数和小数),然后根据你的需求转成整数。这里要注意:如果是百分比里的小数(比如-0.07%),提取后是-0.07,直接转整数会舍去小数部分变成0;如果需要的是百分比的实际比例数值(比如-0.07%对应-7),可以先乘以100再转整数。

示例代码:

# 匹配所有正负整数/小数,包括带负号的
numbers = re.findall(r'-?\d+\.?\d*', pre_text)

# 直接转换为整数(舍去小数部分)
int_numbers = [int(float(num)) for num in numbers]

# 若需要把百分比数值转成对应整数(比如-0.07% → -7)
# int_percent_numbers = [int(float(num) * 100) for num in numbers]

print(int_numbers)

比如你给出的示例文本:last balance: xxxxxx (-0.07%) buy hold: xxxxxx (-0.08%) vs. buy hold: 0.01% 2 tra...,提取后得到的numbers是['-0.07', '-0.08', '0.01', '2'],直接转整数后就是[0, 0, 0, 2];如果用百分比转换逻辑的话就是[-7, -8, 1, 200],你可以根据实际需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:32:36