Python循环Get请求调用Stubhub API:仅返回单活动数据问题排查
嘿,我来帮你排查下这个问题!你遇到循环后只返回单个活动结果的情况,大概率是数据收集逻辑没处理到位,或者循环里的API请求没正确绑定每个Event ID。下面是几个最常见的问题点和对应的解决办法:
这是最常见的坑:如果你在循环里直接写df = pd.DataFrame(当前活动数据),那么每一轮循环都会把之前的DataFrame完全覆盖,最后自然只剩最后一个活动的结果。
解决思路:先初始化一个空列表,每次循环把当前活动的库存数据追加到列表中,等所有循环结束后,再把整个列表转换成DataFrame。
示例代码:
# 初始化空列表来存储所有活动的库存数据 all_inventory = [] eventid_list = [1001, 1002, 1003] # 你的活动ID列表 for event_id in eventid_list: # 替换成你的Stubhub API请求逻辑,注意用当前循环的event_id response = requests.get( f"https://api.stubhub.com/inventory/v1/events/{event_id}/listings", headers=你的请求头参数 ) inv_data = response.json() # 把当前活动的库存数据追加到列表(注意要匹配API返回的结构,比如取listings字段) if "listings" in inv_data: all_inventory.extend(inv_data["listings"]) else: print(f"活动ID {event_id} 未返回有效库存数据") # 循环结束后统一生成DataFrame final_df = pd.DataFrame(all_inventory)
检查你的Get请求URL,是不是不小心写死了某个固定的Event ID,而没有用循环变量event_id替换?比如如果URL是https://api.stubhub.com/.../events/1001/listings,那不管循环多少次,请求的都是同一个活动的数据。
解决思路:用f-string或者字符串拼接,把当前循环的Event ID动态插入到URL中,就像上面示例代码里的写法。
就算你收集了所有数据,如果没把每条库存记录和对应的Event ID绑定,后续可能会混淆不同活动的数据,甚至看起来像是只有一个活动的结果。建议在追加数据时给每条记录加上Event ID字段:
for event_id in eventid_list: # ... 省略API请求逻辑 ... if "listings" in inv_data: # 给每条库存记录添加所属活动的ID for listing in inv_data["listings"]: listing["event_id"] = event_id all_inventory.append(listing)
如果某个Event ID的API请求失败(比如返回404、500错误),且你没有做异常捕获,循环会直接终止,后面的活动ID根本没被处理,最后只返回前面成功的1个活动数据。
解决思路:给请求加上异常捕获逻辑,确保循环能继续执行:
for event_id in eventid_list: try: response = requests.get(...) response.raise_for_status() # 触发HTTP错误异常 inv_data = response.json() # ... 省略数据追加逻辑 ... except requests.exceptions.RequestException as e: print(f"请求活动ID {event_id} 失败: {str(e)}") continue # 跳过当前错误,继续下一个活动
另外你可以检查下print(inv)的输出:如果只输出了一次,那可能循环根本没遍历完eventid_list里的所有ID,比如列表定义有误、循环条件写错了;如果每次循环都输出了对应活动的数据,但最后DataFrame只有一个,那就是上面第1点的问题。
内容的提问来源于stack exchange,提问作者Yukino Kondo

