Изменить вызов API для цикла Python - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь вызвать несколько наборов данных api в цикле for, чтобы изменить вызов, а затем добавить эти наборы данных вместе в более крупный кадр данных.

Я написал этот код, который работает для вызова первого набора данных, но затем возвращает эту ошибку для следующего вызова.

`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)

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Отказ от ответственности: другой ответ верен, и вы должны его использовать.

Однако ваша настоящая проблема связана с тем, что вы переопределяете r здесь:

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

Во времяследующая итерация r все равно будет тем значением, а не той, с которой вы ее инициализировали.Вы можете просто переименовать его в результате, чтобы избежать этой проблемы.Лучше пусть библиотека запросов сделает всю работу.

0 голосов
/ 08 июня 2018

Позвольте 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...