如何用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
相关产品推荐
相关产品推荐

