Splashのエラーをリトライさせる
RetryMiddleware
class scrapy.downloadermiddlewares.retry.RetryMiddleware
接続タイムアウトやHTTP 500エラーなどの一時的な問題が原因である可能性のある失敗した要求を再試行するミドルウェア。
class scrapy.downloadermiddlewares.retry.RetryMiddlewareを使えば、Scrapyは失敗したリクエストを再実行してくれる。
Request.meta の dont_retry キーがTrueに設定されている場合、リクエストはこのミドルウェアによって無視されます。
リトライさせない指示も可能。
ソースコードも比較的コンパクトで読みやすい。
Splashのエラー
If main results in an unhandled exception then Splash returns HTTP 400 response with an error message.
SplashでError Handlingされていないエラーはステータスコード400でエラーとなる。
RetryMiddlewareの設定
RetryMiddlewareで設定できる項目は以下。
1 | RETRY_ENABLED = True |
デフォルトではリトライするエラーコードの対象として400は含まれていない。
400を含めてリトライさせるにはRETRY_HTTP_CODES
に追記する。
RetryMiddlewareの実行結果
実行時のログで有効なミドルウェアを確認
1 | 2021-05-04 10:35:18 [scrapy.middleware] INFO: Enabled downloader middlewares: |
リトライされるとデバッグログで出力される
1 | 2021-05-04 10:35:22 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://xxxx.xxxxxx.xxxxx/xxxxxxxxxxxxxxx via http://splash:8050/execute> (failed 1 times): 500 Internal Server Error |