我正在嘗試從此 API 中提取資料:https : //www.balldontlie.io/#get-all-stats,在 python 中使用以下代碼:
import requests
import json
import time
total_results = []
pages_to_read = 11000
counter = 0
for page_num in range(1, pages_to_read 1):
url = "https://balldontlie.io/api/v1/stats?per_page=100&page=" str(page_num)
print("reading", url)
response = requests.get(url)
data = response.json()
total_results = total_results data['data']
counter = counter 1
print(counter)
if counter == 59:
counter = 0
print('break')
time.sleep(60)
print("Total of", len(total_results), "results")
with open('test.json', 'w', encoding='utf-8') as d:
json.dump(total_results, d, ensure_ascii=False, indent=4)
但是,我總是收到此錯誤:https : //cdn1.gnarususercontent.com.br/1/292460/5c2858ca-33df-4bd8-9b44-0d50a48ab3e0.png
API 應該支持每秒 60 個請求,有時甚至超過 60 個,但最終總是出現此錯誤。有沒有人有任何建議可以幫助我?
PS:我需要所有 11000 頁“統計資訊”中的資料。只有頁面的 json 'data' 資料,不包括 'meta data' 和頁碼。
uj5u.com熱心網友回復:
找到了這個答案:
import requests
import json
import time
from datetime import datetime
resultados_totais = []
paginas_totais_para_ler = 11486
def get_api_data(page_num):
url = "https://balldontlie.io/api/v1/stats?per_page=100&page=" str(page_num)
current_time = datetime.now().strftime("%H:%M:%S")
print("{} - Lendo {}".format(current_time, url))
start_request = datetime.now()
response = requests.get(url)
end_request = datetime.now()
delta = end_request - start_request
if delta.seconds <= 0:
time.sleep(1)
if response.status_code == 200:
data = response.json()
response.raise_for_status()
return data['data']
else:
current_time = datetime.now().strftime("%H:%M:%S")
print("{} - ({}) Limite de request ... aguardando 15 seg para tentar novamente".format(current_time, response.status_code))
time.sleep(15)
return get_api_data(page_num)
for page_num in range(1, paginas_totais_para_ler 1):
resultados_totais.extend(get_api_data(page_num))
if page_num == paginas_totais_para_ler:
print('\nSalvando Arquivo json..')
with open('all_stats.json', 'w', encoding='utf-8') as d:
json.dump(resultados_totais, d, ensure_ascii=False, indent=4)
print('\nArquivo Salvo!!')
print("\nTemos um total de", len(resultados_totais), "resultados.")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/318434.html
