糟糕请求后{sc停止'

时间:2017-10-01 18:27:21

标签: python web-scraping scrapy web-crawler

我不知道它是否相关,但我使用内联请求库。

如果我向网站的API发出请求并返回错误请求(400),则抓取工具就会停止。我怎么让它继续下去?

在下面的示例中,我正在查看图书的售价,图书ISBN是“0046594062994”,因为他们没有这本书,所以它会返回一个错误的请求(您可以尝试输入以下网址)。它与他们所拥有的书籍一起工作得很好。

~~~~~~~~~

@EDIT:我发现这是内联请求的已知问题。

“中间件可以丢弃或忽略非200状态响应,导致回调不继续执行。这可以通过使用标志handle_httpstatus_all来解决。请参阅httperror中间件文档。”

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)

1 个答案:

答案 0 :(得分:1)

您需要使用下面的

将元素传递给请求本身
response2 = yield scrapy.Request("https://api.bookscouter.com/v3/prices/sell/0‌​046594062994.json", meta = {'handle_httpstatus_all' : True})


jsonresponse = loads(response2.body)

现在您要设置handle_httpstatus_all每个代码,例如301302重定向也将移交给您。

所以你应该检查

if response.status == 200:
   jsonresponse = loads(response2.body)
else:
   print("do something else")