2017-10-01 3 views
0

私はそれが関連するかどうかわかりませんが、私はインラインリクエストライブラリを使用しています。悪い要求の後に治療が中止する

サイトのAPIにリクエストを行い、不正なリクエスト(400)を返すと、クローラが停止します。どうすればそれを続けることができますか?

下記の例では、本のISBNは「0046594062994」となっており、この本がないために、悪い要求が返されます(下のURLを入力してください) 。彼らは彼らが持っている本とうまく動作します。

~~~~~~~~~

@EDIT:私が見つけたが、それはインラインリクエストの既知の問題です。

"ミドルウェアは、非200ステータス応答を破棄または無視して、コールバックが実行を継続しないようにすることができます。これは、handle_httpstatus_allフラグを使用することで克服できます。

DOC:https://doc.scrapy.org/en/latest/topics/spider-middleware.html#scrapy.spidermiddlewares.httperror.HttpErrorMiddleware

私はドキュメントが言う何をしようとしたが、それを行うには管理していませんでした。 何が間違っていますか?私のサンプルコードに追加された行を確認してください。

コード例:

response2 = yield scrapy.Request("https://api.bookscouter.com/v3/prices/sell/0046594062994.json") 
    response2.meta['handle_httpstatus_all'] = True 
    jsonresponse = loads(response2.body) 
+0

をチェックする必要があります。だからあなたはScrapyの新しいバージョンでそれを使うのを避けるべきです。 –

+0

@Tarun Lalwani編集を確認してください。 – daniel

+1

'yield scrapy.Request(" https://api.bookscouter.com/v3/prices/sell/0046594062994.json "、meta = {'handle_httpstatus_all':True})' –

答えて

1

あなたは301のようなすべてのコード、302リダイレクトも利きになりますあなたがhandle_httpstatus_allを設定していることを今

response2 = yield scrapy.Request("https://api.bookscouter.com/v3/prices/sell/0‌​046594062994.json", meta = {'handle_httpstatus_all' : True}) 


jsonresponse = loads(response2.body) 

の下に使用して要求自体にメタを渡す必要がありますあなたに。

ですから、インライン要求ライブラリは古く、今年以上更新されていない

if response.status == 200: 
    jsonresponse = loads(response2.body) 
else: 
    print("do something else") 
関連する問題