如何将Beautiful Soup提取的价格文本转换为浮点数并构建列表?循环外仅获取最后一个价格值的问题解决
解决价格提取与列表构建的问题
嘿,我来帮你搞定这两个问题!咱们一步步拆解并解决:
问题1:将提取的价格文本转换为浮点数列表
首先,你提取的价格文本有的带$符号(比如1.35 $),需要先清理掉非数字的部分,再转换为浮点数。同时,我们需要一个列表来存储所有价格,避免值被覆盖。
问题2:循环外仅能获取最后一个价格值
之前的问题在于你没有把每个price2的值存储起来,而是每次循环都用新值覆盖了price2变量。解决方法是提前初始化一个列表,把每个处理后的价格都添加到列表中,这样循环外就能访问所有值了。
修改后的完整代码
import requests from bs4 import BeautifulSoup url = "https://starpets.gg/adopt-me/shop/pet/firefly/15292" result = requests.get(url) doc = BeautifulSoup(result.text, "html.parser") # 初始化一个空列表,用来存储所有转换后的浮点数价格 all_prices = [] # 处理第一个"Best price" best_price_tag = doc.find("span", itemprop="price") if best_price_tag: # 增加判断避免找不到标签报错 best_price = float(best_price_tag.text.strip()) all_prices.append(best_price) print("Best price", best_price) print("-----") # 处理类标签下的所有价格 price_tags = doc.find_all("div", class_="_text_j98bt_1 _text__size_m_j98bt_40 _text__weight_bold_j98bt_83 _text__style_normal_j98bt_95 _text__decoration_normal_j98bt_104 _content-price_1gow4_85") for tag in price_tags: # 清理文本:去掉$符号和前后空格,确保只保留数字和小数点 raw_price = tag.text.strip().replace("$", "") # 转换为浮点数并添加到列表 try: price = float(raw_price) all_prices.append(price) print(price) except ValueError: print(f"跳过无效价格:{raw_price}") # 处理异常情况,避免程序崩溃 # 现在循环外可以访问所有价格的浮点数列表了! print("\n所有价格的浮点数列表:", all_prices) # 示例:检查符合预算的价格(假设预算是2.0) budget = 2.0 affordable_prices = [price for price in all_prices if price <= budget] print(f"\n符合或低于预算${budget}的价格:", affordable_prices)
关键说明
- 存储所有价格:通过初始化
all_prices列表,每次处理完一个价格就用append()添加进去,这样所有值都会被保留,不会被后续循环覆盖。 - 清理价格文本:用
strip()去除前后空格,replace("$", "")去掉美元符号。如果遇到更复杂的格式(比如带逗号的价格),可以用正则表达式re.sub(r'[^0-9.]', '', raw_price)来过滤掉所有非数字和小数点的字符。 - 异常处理:添加
try-except块可以避免因无效价格文本(比如空值、非数字字符串)导致程序崩溃。 - 预算检查:最后用列表推导式快速筛选出符合或低于预算的价格,满足你的核心需求。
内容的提问来源于stack exchange,提问作者Rosie
相关产品推荐
相关产品推荐

