使用BeautifulSoup爬取Steam价格时如何为空列表赋值避免min()报错
错误原因
ValueError: min() arg is an empty sequence报错触发的原因是部分Steam市场页面没有匹配到带data-price属性的价格标签,生成的CromoList为空列表,对空列表执行min()计算最小值时就会触发该错误。
修复方案
你需要在处理每个页面对应的价格列表时增加空值判断,空列表就用你预设的ListaR值填充即可,同时可以兼容你“每个页面价格存单独子列表、汇总到总列表”的需求,修改后的完整代码如下:
from bs4 import BeautifulSoup import requests import time AppID = ['495570', '540190', '607210', '575780', '338840', '585830', '637330', '514360', '575760', '530540', '361890', '543170', '346500', '555930', '575700', '595780', '362400', '562360', '745670', '763360', '689360', '363610', '575770', '467310', '380560'] ListaUrl = list() ListaR = ["$0.00 USD", "$0.00 USD"] # 提前把预设默认值转成浮点数值 default_prices = [float(i.strip('USD$')) for i in ListaR] # 加请求头避免Steam反爬拦截 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } for x in AppID: url = "https://steamcommunity.com/market/search?category_753_Game%5B%5D=tag_app_"+x+"&category_753_cardborder%5B%5D=tag_cardborder_0&category_753_item_class%5B%5D=tag_item_class_2#p1_price_asc" ListaUrl.append(url) PageCromos = [] for x in ListaUrl: PageCromos.append(requests.get(x, headers=headers)) time.sleep(1) # 加请求间隔避免触发Steam临时IP封禁 SoupCromos = [BeautifulSoup(x.content, "html.parser") for x in PageCromos] PrecioCromos = [x.find_all("span", {"data-price": True}) for x in SoupCromos] # 存储所有页面价格子列表的总列表 full_price_list = [] # 存储每个页面最小价格的列表 min_CromoList = [] for item in PrecioCromos: CromoList = [float(i.text.strip('USD$')) for i in item] # 空列表判断逻辑 if not CromoList: CromoList = default_prices full_price_list.append(CromoList) min_CromoList.append(min(CromoList)) print(min_CromoList)
内容的提问来源于stack exchange,提问作者Lautaro Casalini
相关产品推荐
相关产品推荐

