создать цикл для извлечения URL-адресов в JSON и CSV - PullRequest
0 голосов
/ 29 октября 2019

Я настроил цикл для удаления с 37900 записей. Из-за способа настройки URL / сервера в каждом URL отображается ограничение в 200 записей. Каждый URL заканчивается 'skip = 200' или кратным 200, чтобы перейти к следующей странице URL, где отображаются следующие 200 записей. В конце концов я хочу просмотреть все URL и добавить их в таблицу. Связанный опубликованный не может зациклить последний URL с ограничениями на подкачку

Я создал два цикла, как показано ниже - один для создания URL с пропуском = каждые 200 записей, а другой для получения ответа откаждый из этих URL, затем другой цикл для чтения json и добавления их к одному фрейму данных.

Я не уверен, чего не хватает в моем втором цикле - пока он создает только json для первой страницы URL, но непоследующие страницы. У меня такое ощущение, что usl jsons не добавляются в список json = [], поэтому он предотвращает зацикливание и добавление jsons в csv. Будем благодарны за любые предложения по изменению циклов и улучшению этих кодов!

import pandas as pd
import requests
import json

records = range(37900)
skip = records[0::200]

Page = []
for i in skip:
    endpoint = "https://~/Projects?&$skip={}".format(i)
    Page.append(endpoint)

jsnlist = []
for j in Page:
    response = session.get(j) #session here refers to requests.Session() I had to set up to authenticate my access to these urls
    responsejs = response.json()
    responsejsval = responsejs['value'] #I only want to extract header called 'value' in each json
    with open('response2jsval.json', 'w') as outfile:
        json.dump(jsnlist, outfile)

concat = pd.DataFrame()
for k in jsnlist:
        df = pd.DataFrame(k) #list to df
        concat = concat.append(df, ignore_index = True)
        print(concat)


1 Ответ

0 голосов
/ 29 октября 2019

Мне нечего проверять

Я думаю, вы слишком сильно это усложнили. С тех пор вы редактировали вопрос, но есть пара моментов, которые нужно сделать:

  1. Вы определяете jsnlist = [], но никогда не используете его. Почему?
  2. Вы назвали свой собственный объект json (сейчас нет, но я не уверен, понимаете ли вы, почему). Вызов вашего собственного объекта json просто заменит текущий модуль, и весь код остановится до того, как вы попадете в цикл
  3. Нет никакой причины сохранять эти данные на диск перед попыткойдля создания кадра данных
  4. Открытие файла .json в режиме записи ('w') приведет к стиранию всех существующих данных на каждой итерации цикла
  5. Добавление JSON к файлу не дастдопустимый формат для анализа при повторном считывании. В лучшем случае это может быть JSONLines
  6. Добавление фреймов данных в цикле имеет ужасную сложность, поскольку каждый раз требует копирования исходных данных.

Ваш подход будет примерно таким:

import pandas as pd
import requests
import json

records = range(37900)
skip = records[0::200]

Page = []
for i in skip:
    endpoint = "https://~/Projects?&$skip={}".format(i)
    Page.append(endpoint)

jsnlist = []
for j in Page:
    response = session.get(j) #session here refers to requests.Session() I had to set up to authenticate my access to these urls
    responsejs = response.json()
    responsejsval = responsejs['value'] #I only want to extract header called 'value' in each json
    jsnlist.append(responsejsval)

df = pd.DataFrame(jsnlist)

df = pd.DataFrame(jsnlist) может потребовать некоторой работы, но вам нужно показать, с чем мы столкнулись. Мне нужно увидеть responsejs['value'], чтобы ответить полностью.

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