Как получить больший объем данных из Stack Exchange API? - PullRequest
0 голосов
/ 16 апреля 2020

Stack Exchange API возвращает только 30 элементов за запрос. Я использовал for l oop для вызова стека Exchange API, как показано ниже, чтобы получить 4500 записей.

import requests
complete_data=[]
for i in range (150):
    response = requests.get("https://api.stackexchange.com/2.2/questions?order=desc&sort=activity&site=stackoverflow")
    newData=json.loads(response.text)
    for item in newData['items']:
        complete_data.append(item)

Но при анализе вопросов, которые я получил от API, были те же наборы данных, которые был получен 150 раз. Таким образом, я получил один и тот же набор данных для каждого запроса данных в коде. Мне нужно около 5000 записей для анализа данных. Может кто-нибудь показать мне, какие изменения я должен сделать в моем коде?

1 Ответ

1 голос
/ 16 апреля 2020

На самом деле вы получаете 30 элементов на запрос и одну и ту же страницу (первую). Определите размер страницы (макс. 100, мин. 1) и страницу (i + 1) для решения проблемы:

import requests
import time

complete_data=[]
for i in range (45):
    response = requests.get("https://api.stackexchange.com/2.2/questions?order=desc&sort=activity&site=stackoverflow&pagesize=100&page=" + str(i + 1))
    newData=json.loads(response.text)
    for item in newData['items']:
        complete_data.append(item)
    print("Processed page " + str(i + 1) + ", returned " + str(response))
    time.sleep(2) # timeout not to be rate-limited

Примечания:

  • Время ожидания на 2 секунды добавлено для предотвращения ограничения скорости .
  • Возможно, вы захотите получить ключ API, чтобы увеличить квоту с 300 до 10000.
  • Если вы попытаетесь получить На 180+ страницах вы можете получить ошибку !.
...