You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pandas.read_json得到空DataFrame,如何解析API获取投注数据?

问题分析与解决方案

1. 先查看API返回的原始结构

直接用pd.read_json返回空DataFrame,大概率是API返回的JSON结构不是pandas能直接解析的格式,或者请求本身没拿到有效数据。先打印原始响应内容确认:

import requests

url = 'https://api-v2.blaze.com/roulette_games/current'
response = requests.get(url)
# 打印完整响应JSON
print(response.json())
# 同时检查请求状态码,确保是200(正常响应)
print("状态码:", response.status_code)

通过这一步你能看到API实际返回的结构——比如数据可能被包裹在game或data这类顶层键下,而非直接是DataFrame可识别的数组/对象。

2. 添加请求头绕过反爬限制

很多API会验证请求的User-Agent字段,模拟浏览器请求才能拿到有效数据:

import requests
import pandas as pd

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}
url = 'https://api-v2.blaze.com/roulette_games/current'
response = requests.get(url, headers=headers)
data = response.json()

# 根据实际返回的结构提取数据,比如假设数据在`game`键下
if 'game' in data:
    # 把单个游戏对象转为DataFrame(加[]是为了让pandas识别为行)
    rodadaatual = pd.DataFrame([data['game']])
else:
    # 如果返回的是数组直接转
    rodadaatual = pd.DataFrame(data)

print(rodadaatual)

3. 解析嵌套的投注数据(bets字段)

如果bets字段是嵌套的JSON数组,需要单独展开解析:

# 先确保rodadaatual有数据
if not rodadaatual.empty and 'bets' in rodadaatual.columns:
    # 展开bets列的嵌套数组
    bets_data = rodadaatual['bets'].explode()
    # 把嵌套的JSON转为DataFrame
    bets_df = pd.json_normalize(bets_data)
    print("投注数据:")
    print(bets_df)

4. 排查API是否变更

如果以上步骤还是拿不到数据,可能是API地址或结构已更新。可以查看Blaze网站的网络请求(浏览器F12→网络标签),找到当前获取轮次数据的真实API地址和参数。

内容的提问来源于stack exchange,提问作者Lucas Mendes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:24:39