有没有一种方法可以将分页json文件中的所有行/数据获取到pandas数据帧中



编辑:

以下是我的步骤:

url = "https://ted.europa.eu/api/v2.0/notices/search?&q=TD%3D%5B3%5D&reverseOrder=true&scope=3&sortField=PD"
# get data from url 
response = requests.get(url)
# return the json data, and read the output dict keys
data = response.json()
data

我从一个api中获得了一个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'},
...
我把它转换成pd-df-时
df = pd.DataFrame(data["results"])

dict_keys(['book','total','results'])

# create dataframe from key of interest
df = pd.DataFrame(data["results"])
df.head()

这按预期返回了数据帧。。。

# count number of rows
len(df.index)

1000

然而,我预计总数为1703997。

我还在考虑如何修复

你知道我该怎么做吗?

您应该在API请求中指定页面。遗憾的是,API文档似乎还不可用
然而,根据Github上的这个例子,您应该能够获得任何带有pageNum=的页面
您应该能够使用以下内容将所有行附加到df

url = "https://ted.europa.eu/api/v2.0/notices/search?&q=TD%3D%5B3%5D&reverseOrder=true&scope=3&sortField=PD"
response = requests.get(url)
data = response.json()
df = pd.DataFrame()
i = 1
while "results" in data.keys():
df_page = pd.DataFrame(data["results"])
# print(df_page.head()) # uncomment to see page #i as df
df = df.append(df_page, ignore_index=True)
i+=1
response = requests.get(f'{url}&pageNum={i}')
data = response.json()

可能需要一段时间才能阅读完所有页面,所以请耐心等待;-)

编辑:

在您的示例中,在得到响应{'errorCode': 400, 'message': "The requested page number doesn't exist."}之前,代码将循环1700多次。我不知道你的内存/服务器是否能处理那么多。你可能想把你的结果分成几个块。。。

最新更新