编辑:
以下是我的步骤:
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文件,如下所示:
我把它转换成pd-df-时{'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'}, ...
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多次。我不知道你的内存/服务器是否能处理那么多。你可能想把你的结果分成几个块。。。