продолжайте перебирать словарь с разбивкой на страницы - PullRequest
0 голосов
/ 19 июня 2020

У меня есть требование, при котором я получаю ответ с веб-сайта и сохраняю его как json. Но проблема в том, что ответ ограничен (разбит на страницы) и у него есть ключ «__next», где я могу go на следующую страницу и получить данные. Мой logi c - это итерация ответа и определение, доступен ли «__next» или нет, если он доступен, взять значение (url), получить данные следующей страницы и повторить их, пока не найдете ключ «__next».

это ответ

{
"results":[], 
"__next": "next page url"
}

Я написал функцию, в которой я могу получить результат, используя URL-адрес. get_response ("URL следующей страницы")

это моя функция ответа

def response_function(url_in):
    headers = {'Authorization':access_token ,'content-type': 'application/x-www-form-urlencoded','Accept':'application/json'}
    r = requests.get(url_in, headers=headers)
    response = json.loads(r.content)
    print("inside for response function")
    return response.values()
response1 = response_function('first url')
skip_tokens = []
for i in response1:
    if  "__next" in i:
        # print(i["__next"])
        skip_tokens.append(i["__next"])

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Если я правильно понял ваш вопрос, вам нужна помощь в написании алгоритма для перебора полученных сегментированных данных. Этого легко добиться, используя генератор, например:

def get_data(url):
  res, next_url = fetch_data_from_website(url)

  while res:
    for item in res:
      yield item # NOTE: Error before fixing the answer was here

    if next_url:
      res, next_url = fetch_data_from_website(next_url)

Где fetch_data_from_website() - это функция, которая получает на входе URL-адрес и возвращает результаты и следующий URL-адрес (или None) в виде кортеж. Это позволит прозрачно перебирать фрагменты.

Теперь вы сможете перебирать всю разбитую коллекцию следующим образом:

for x in get_data(url):
  do_something_with_element(x)
0 голосов
/ 19 июня 2020

с учетом того, что ваша функция get_response возвращает словарь:

next_page_key = "__next"
partial_response = get_response("first_page_url")
while partial_response.get(next_page_key):
    next_url = partial_response.pop(next_page_key, None)
    partial_response.update(get_response(next_url))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...