2015-12-07 1 views
5

as per these指示HTTP 500エラー、接続失われたエラーなどは常に再スケジューリングされていますが、403エラーが再スケジュールされた場合、または単に有効な応答として処理されたり、再試行の制限。同じ命令からも403スケジューリングで後でクロールするHTTPステータスコードを再スケジュールする方法はありますか?

失敗したページが掻きプロセスで収集し、クモは、すべての正規( 以外が失敗した)のページをクロールし終えた後、 の端を再スケジュールされています。再試行に失敗したページがなくなると、この ミドルウェアから信号が送信されます(retry_complete)ので、他の拡張機能では がその信号に接続できます。

何にこれらFailed Pages指すのでしょうか? 403エラーが含まれていますか?

また、私はscrapyがHTTP 400状況に遭遇した場合、この例外が発生している見ることができます:

2015-12-07 12:33:42 [scrapy] DEBUG: Ignoring response <400 http://example.com/q?x=12>: HTTP status code is not handled or not allowed 

この例外から私はそれがHTTP 400の応答は無視され、再スケジュールされていないことは明らかだと思います。

403 HTTPステータスが無視されたり、最後にクロールされるように再スケジュールされているかどうかはわかりません。 these文書に従ってHTTPステータスが403のすべての応答を再スケジュールしようとしました。ここで私はこれまで試してみましたものです:

middlewares.pyファイルで:settings.pyで

def process_response(self, request, response, spider): 
    if response.status == 403: 
     return request 
    else: 
     return response 

RETRY_TIMES = 5 
RETRY_HTTP_CODES = [500, 502, 503, 504, 400, 403, 404, 408] 

私の質問は以下のとおりです。

  1. 何これらはFailed Pagesですか? 403エラーが含まれていますか?
  2. 403エラーページのスケジュールを変更するには、process_responseと記述する必要がありますか?または、それらは自動的に治療によって再スケジュールされますか?
  3. どのようなタイプの例外と(HTTPコード)が治療によって再スケジュールされますか?
  4. 404エラーページのスケジュールを変更すると、無限ループに入るか、タイムアウトが発生してから再スケジュールが行われなくなりますか?

答えて

5
  1. あなたはhereを再試行するデフォルトのステータスを見つけることができます。

  2. その要求を処理し、再試行する必要がありsettings.pyファイルにRETRY_HTTP_CODESから403を追加します。

  3. の中のものは既にデフォルトのものをチェックしています。

  4. RETRY_TIMESは、エラーページを試行する回数を処理します。デフォルトでは2に設定されており、settings.pyファイルで上書きできます。
+0

お返事ありがとうございます。私はかなり再試行について知っている。私の主な質問は、再スケジューリングについてです。再試行されるコードも再スケジューリングされていますか? – Rahul

+0

私はあなたが何を意味しているのか本当に分かりませんが、再試行は再び 'Request'を起動しています。 – eLRuLL

+0

'スパイダーがすべての通常の(失敗していない)ページのクロールを終えたら、駄目なページが掻き取りプロセスで収集され、最後に再スケジューリングされます。 '私はこの再スケジューリングについて話しています。 – Rahul

関連する問題