Как зациклить GET-запрос в Python для получения всех данных из разбитого на страницы API в кадре данных - PullRequest
0 голосов
/ 01 февраля 2019

Мне нужно извлечь все данные из API с Python, но каждая страница содержит только 100 результатов, и я не могу определить, как использовать цикл WHILE для возврата каждой страницы, чтобы я мог поместить все данные в один фрейм данных,API настраивается в формате URL: "https://www.api.url.com/sessions?apikey=xxxx&apisecret=xxx&fromdate=2018-11-11&todate=2019-01-31&page=1&country=US"

И страница, и страна являются необязательными параметрами.

Я попытался изменить URL-адрес API, чтобы" page = 1: 160 "и"page = 1-160 ", но он вернул только первую страницу.

Затем я попытался добавить параметр страницы в виде отдельного оператора, который возвращает ошибку имени;

IN:

response = requests.get("https://www.api.url.com/sessions?            
apikey=xxxx&apisecret=xxx&fromdate=2018-11-11&todate=2019-01-31", 
params={'page': page}))
data = response.json()
df=pd.DataFrame(data['Sessions'])
pd.options.display.max_rows = 2000

OUT:

NameError name 'page' is not defined

Затем я попытался запустить тот же код, но начиная с формата API, указанного владельцем, но получил очень похожее сообщение об ошибке;

IN:

r_sessions = requests.get("https://www.api.url.com/sessions?            
apikey=xxxx&apisecret=xxx&fromdate=2018-11-11&todate=2019-01-31").json()
num_pages=r_sessions['last_page']
for page in range(2, num_pages + 1):
r_sessions = requests.get("https://www.api.url.com/sessions?            
apikey=xxxx&apisecret=xxx&fromdate=2018-11-11&todate=2019-01-31", params={'page': page}).json()
print(r_sessions['page'])

OUT:

KeyError 'last_page'

Я ожидал получить фрейм данных, содержащий все результаты API, даже если они были разбиты на страницы. Однако я могу получить только максимумодна страница на вызов API. Я знаю, что мне нужно это зациклить, и я не знаю как, поскольку я не знаю, сколько там страниц.

1 Ответ

0 голосов
/ 01 февраля 2019
  1. Предполагается, что при определении значения, использованного в ключе, используются одинарные кавычки для ключа, а не для значения, следовательно, ошибка.Без одинарных или двойных кавычек Python рассматривает это как переменную, которая не определена

правильный код без ошибки страницы:

response = requests.get("https://www.api.url.com/sessions? 
apikey=xxxx&apisecret=xxx&fromdate=2018-11-11&todate=2019-01-31", 
params={'page': 'page'})) 
data = response.json()
df=pd.DataFrame(data['Sessions'])
pd.options.display.max_rows = 2000
Ключ r_session не существует в json, который был получен.Вы можете использовать приведенный ниже простой код для проверки ключа верхнего уровня в json.

r_sessions = requests.get("https://www.api.url.com/sessions?apikey=xxxx&apisecret=xxx&fromdate=2018-11-11&todate=2019-01-31").json() for i in r_sessions: print(i)

...