Python爬取Steam卡牌价格取各列表最小值仅输出单值问题求助
问题排查
核心错误点
- 未存储每次计算得到的最小值:仅在循环内用变量
CromoList6覆盖存储单次计算的最小值,循环结束后变量只保留最后一次循环的结果,最终打印仅输出单个数值。 - 循环逻辑与需求不符:你期望对每个页面对应的价格子列表求最小值,但代码嵌套遍历到了单个价格标签,对单个价格数值做排序取首操作,完全不符合预期的子列表求最小逻辑。
- 标签文本提取方式错误:直接遍历BeautifulSoup的span标签对象获取内容,正确方式是调用
.text属性获取标签内的文本内容。
修正后代码
from typing import List from bs4 import BeautifulSoup import requests import pandas as pd from decimal import Decimal # 用于存储每个页面的最小价格的结果列表 ListaPreciosCromos = list() ListaUrl = ['https://steamcommunity.com/market/search?category_753_Game%5B%5D=tag_app_495570&category_753_cardborder%5B%5D=tag_cardborder_0&category_753_item_class%5B%5D=tag_item_class_2#p1_price_asc', 'https://steamcommunity.com/market/search?category_753_Game%5B%5D=tag_app_540190&category_753_cardborder%5B%5D=tag_cardborder_0&category_753_item_class%5B%5D=tag_item_class_2#p1_price_asc', 'https://steamcommunity.com/market/search?category_753_Game%5B%5D=tag_app_607210&category_753_cardborder%5B%5D=tag_cardborder_0&category_753_item_class%5B%5D=tag_item_class_2#p1_price_asc',] PageCromos = [requests.get(x) for x in ListaUrl] SoupCromos = [BeautifulSoup(x.content, "html.parser") for x in PageCromos] PrecioCromos = [x.find_all("span", {"data-price": True}) for x in SoupCromos] # 遍历每个页面对应的价格标签组 for page_price_tags in PrecioCromos: current_page_prices = [] for tag in page_price_tags: # 提取价格文本并清洗 price_text = tag.text.strip() clean_price = float(price_text.replace("$","").replace("USD","").strip()) current_page_prices.append(clean_price) # 计算当前页面的最小价格并存入结果列表 page_min = min(current_page_prices) ListaPreciosCromos.append(page_min) # 输出所有页面的最小价格列表 print(ListaPreciosCromos)
调整说明
- 保留预先定义的
ListaPreciosCromos作为结果存储容器,每次计算完单页最小值就追加到该列表中 - 调整循环层级,外层遍历每个页面的价格标签集合,内层处理单个标签的价格清洗,同一页面的所有清洗后价格统一求最小值
- 调用
min()方法直接计算列表最小值,无需手动排序后取首元素,代码更简洁高效
内容的提问来源于stack exchange,提问作者Lautaro Casalini
相关产品推荐
相关产品推荐

