#アノテーション
この関数はこれを返します とかの説明用->以降の文字は関数に影響しない
def fetch(url : str) -> requests.Response:
max_retries = 3
retries = 0
while True:
try:
print(f'Retrieving {url} ...')
response = requests.get(url)
print(f'Status: {response.status_code}')
if response.status_code not in TEMPORARY_ERROR_CODES:
return response
...
#API通信の例外処理
この方のページが参考になりました
#指数関数的なリトライ間隔を求める
この方のページが参考になりました
イメージは、同じ間隔でスクレイピングを続けてサーバーに負荷がかかりエラーが吐かれた場合、同じ間隔で続けるとずっとエラーを吐かれてしまうので、
リトライ間隔を開けて、サーバーの負荷を軽減している。と理解しました。
純粋に+1秒ずつでも良いのでは?とも思いましたが…