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

如何将TED API分页返回的JSON全量数据导入pandas DataFrame

问题背景

操作步骤

url = "https://ted.europa.eu/api/v2.0/notices/search?&q=TD%3D%5B3%5D&reverseOrder=true&scope=3&sortField=PD"

# 从url获取数据
response = requests.get(url)

# 返回json数据并读取输出字典的键
data = response.json()
data

获取到的JSON结构如下:

{'took': 205, 
 'total': 1703997,
'results': [{'AA': '1',
'AC': '2',
'BI': [],
'CY': 'MK',
'DI': '1046/2018',
'TY': '1'},
{'AA': '6',
'AC': '1',
'BI': [],
'CY': 'RS',
'DI': 'CODE_OTHERS',
'TY': '1'},
{'AA': '5',
'AC': '1',
'BI': [],
'CY': 'BE',
'DI': '1046/2018',
'TY': '1'},
...
# 读取输出字典的键
data.keys()

输出结果:

dict_keys(['took', 'total', 'results'])
将数据转为pandas DataFrame的代码:

# 从目标键生成dataframe
df = pd.DataFrame(data["results"])
df.head()

执行后返回符合预期的DataFrame,统计行数代码:

# 统计行数
len(df.index)

输出结果:

1000

问题描述

接口返回的总数据量为1703997条,当前仅获取到单页1000条数据,需要将全量数据导入pandas DataFrame。

解决方案

该API默认做了分页限制,单页最大返回1000条数据,通过追加page分页参数循环拉取所有页数据再合并即可,具体实现如下:

import requests
import pandas as pd
import time

base_url = "https://ted.europa.eu/api/v2.0/notices/search?&q=TD%3D%5B3%5D&reverseOrder=true&scope=3&sortField=PD"
all_results = []
# 先拉取第一页获取总数据量
first_resp = requests.get(base_url + "&page=1")
first_data = first_resp.json()
total_count = first_data["total"]
all_results.extend(first_data["results"])
# 计算总页数
total_page = total_count // 1000 + 1 if total_count % 1000 != 0 else total_count // 1000

# 循环拉取剩余页
for page in range(2, total_page + 1):
    # 加延迟避免触发接口限流
    time.sleep(1)
    try:
        resp = requests.get(base_url + f"&page={page}")
        resp.raise_for_status()
        page_data = resp.json()
        all_results.extend(page_data["results"])
        # 每拉10页打印一次进度
        if page % 10 == 0:
            print(f"已完成:{page}/{total_page}页,累计拉取{len(all_results)}条")
    except Exception as e:
        print(f"第{page}页拉取失败:{e},重试中")
        time.sleep(3)
        resp = requests.get(base_url + f"&page={page}")
        page_data = resp.json()
        all_results.extend(page_data["results"])

# 全量数据转为DataFrame
full_df = pd.DataFrame(all_results)
print(f"全量数据拉取完成,共{len(full_df)}条")

注意事项

  • 170万条数据拉取耗时较长,建议拉取过程中每100页存一次本地csv,避免中途中断数据丢失
  • 若设备内存不足以承载全量DataFrame,可以分批存本地文件后再做合并处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:15:04