我不知道它是否相关,但我使用内联请求库。
如果我向网站的API发出请求并返回错误请求(400),则抓取工具就会停止。我怎么让它继续下去?
在下面的示例中,我正在查看图书的售价,图书ISBN是“0046594062994”,因为他们没有这本书,所以它会返回一个错误的请求(您可以尝试输入以下网址)。它与他们所拥有的书籍一起工作得很好。
~~~~~~~~~
@EDIT:我发现这是内联请求的已知问题。
“中间件可以丢弃或忽略非200状态响应,导致回调不继续执行。这可以通过使用标志handle_httpstatus_all来解决。请参阅httperror中间件文档。”
我试着去做医生所说的但没有设法做到的。 我究竟做错了什么?检查添加到我的示例代码的行。
示例代码:
response2 = yield scrapy.Request("https://api.bookscouter.com/v3/prices/sell/0046594062994.json")
response2.meta['handle_httpstatus_all'] = True
jsonresponse = loads(response2.body)
答案 0 :(得分:1)
您需要使用下面的
将元素传递给请求本身response2 = yield scrapy.Request("https://api.bookscouter.com/v3/prices/sell/0046594062994.json", meta = {'handle_httpstatus_all' : True})
jsonresponse = loads(response2.body)
现在您要设置handle_httpstatus_all
每个代码,例如301
,302
重定向也将移交给您。
所以你应该检查
if response.status == 200:
jsonresponse = loads(response2.body)
else:
print("do something else")