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

如何用Python循环批量抓取赛事JSON数据并合并输出?

批量抓取赛事JSON数据并合并输出的实现方案

以下是针对需求优化后的代码实现,附带关键逻辑说明:

import requests
import json

# 定义URL模板,用占位符替换赛事编号
base_url = "https://s3-ap-southeast-2.amazonaws.com/racevic.static/2018-01-01/flemington/sectionaltimes/race-{}.json?callback=sectionaltimes_callback"
# 设置要抓取的赛事范围,比如从race-1到race-5,修改max_race即可调整X值
max_race = 5
# 存储所有赛事数据的容器
all_race_data = []

for race_num in range(1, max_race + 1):
    # 生成当前赛事的目标URL
    target_url = base_url.format(race_num)
    try:
        # 发送GET请求
        response = requests.get(target_url)
        # 校验请求是否成功
        response.raise_for_status()
        
        # 处理JSONP格式:剥离回调函数包裹的外层内容
        raw_data = response.text.replace("sectionaltimes_callback(", "").rstrip(")")
        # 解析为JSON对象
        race_data = json.loads(raw_data)
        # 将当前赛事数据加入总容器
        all_race_data.append(race_data)
        print(f"已成功抓取race-{race_num}数据")
    except requests.exceptions.RequestException as e:
        print(f"抓取race-{race_num}失败:{str(e)}")
    except json.JSONDecodeError as e:
        print(f"解析race-{race_num}数据失败:{str(e)}")

# 将合并后的数据写入本地JSON文件
with open("all_race_data.json", "w", encoding="utf-8") as output_file:
    json.dump(all_race_data, output_file, indent=4, ensure_ascii=False)

print(f"所有数据已保存至all_race_data.json,共获取{len(all_race_data)}条有效赛事数据")

关键逻辑说明

  • URL模板化:通过占位符{}配合format()方法,循环生成不同赛事的URL,无需手动逐个修改。
  • JSONP格式处理:原接口返回的是带回调函数的JSONP数据,必须剥离外层的sectionaltimes_callback(和),才能正常解析为JSON对象。
  • 异常容错:捕获请求失败、数据解析失败等异常,避免单个赛事出错导致整个程序终止,同时输出错误信息便于排查。
  • 数据合并与存储:用列表统一存储所有赛事数据,最后通过json.dump()写入文件,indent=4保证JSON格式可读性,ensure_ascii=False支持非ASCII字符(如中文)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:33:17