为循环python更改API调用

2024-05-16 06:10:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在for循环中调用几个api数据集,以便更改调用,然后将这些数据集附加到一个更大的数据帧中。你知道吗

我编写了这段代码,用于调用第一个数据集,但在下一次调用时返回此错误。你知道吗

`url = base + "max=" + maxrec + "&" "type=" + item + "&" + "freq=" + freq + "&" + "px=" +px + "&" + "ps=" + str(ps) + "&" + "r="+ r + "&" + "p=" + p + "&" + "rg=" +rg + "&" + "cc=" + cc + "&" + "fmt=" + fmt

TypeError: must be str, not Response`

这是我现在的密码

import requests
import pandas as pd

base = "http://comtrade.un.org/api/get?"
maxrec = "50000"
item = "C"
freq = "A"
px="H0"
ps="all"
r="all"
p="0"
rg="2"
cc="AG2"
fmt="json"

comtrade = pd.DataFrame(columns=[])

for year in range(1991,2018):
    ps="{}".format(year)
    url = base + "max=" + maxrec + "&" "type=" + item + "&" + "freq=" + freq + "&" + "px=" +px + "&" + "ps=" + str(ps) + "&" + "r="+ r + "&" + "p=" + p + "&" + "rg=" +rg + "&" + "cc=" + cc + "&" + "fmt=" + fmt
    r = requests.get(url)
    x = r.json()
    new = pd.DataFrame(x["dataset"])
    comtrade = comtrade.append(new)

Tags: 数据urlforbaseitemrgccps
2条回答

免责声明:另一个答案是正确的,你应该使用它。你知道吗

然而,您的实际问题源于这样一个事实,即您在这里重写r

r = requests.get(url)
x = r.json()

在下一次迭代中,r仍然是该值,而不是您最初初始化它时使用的值。您可以简单地将其重命名为result以避免该问题。最好让图书馆来做这项工作。你知道吗

requests为您组装URL。你知道吗

common_params = {
    "max": maxrec,
    "type": item,
    "freq": freq,
    # etc
}

for year in range(1991,2018):    
    response = requests.get(base, params=dict(common_params, ps=str(year))
    response_data = response.json()
    new = pd.DataFrame(response_data["dataset"])
    comtrade = comtrade.append(new)

相关问题 更多 >