请教下 scrapy Request的errback,和RetryMiddleware下载中间件对错误的处理有什么区别吗?
似乎都能实现在爬取出错的时候对错误的捕获和处理。
希望能对各种400 或者 断网等各种情况的捕获改使用哪种方法比较好。
还有就是 如何在出错后,如何将当前的爬取地址重新加入队列?
setting里面只有见得重试使能 次数 和特定code。
如何能给我个简单的例程就更棒了!
感谢
请教下 scrapy Request的errback,和RetryMiddleware下载中间件对错误的处理有什么区别吗?
似乎都能实现在爬取出错的时候对错误的捕获和处理。
希望能对各种400 或者 断网等各种情况的捕获改使用哪种方法比较好。
还有就是 如何在出错后,如何将当前的爬取地址重新加入队列?
setting里面只有见得重试使能 次数 和特定code。
如何能给我个简单的例程就更棒了!
感谢
2 回答4.3k 阅读✓ 已解决
2 回答863 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
3 回答857 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
4 回答2.6k 阅读
3 回答906 阅读✓ 已解决
重新查看文档
errback似乎更适合用于检查记录请求产生的错误,但是不适合请求的重试。
retry中间件能将出错的任务调用_retry方法 检查最大重试次数加入到队尾
更新 通过重写RetryMiddleware实现对爬取出错的处理和重爬:
def process_response(self, request, response, spider)
该方法默认情况下对
RETRY_HTTP_CODES = [500, 502, 503, 504, 400, 408] 中情况进行重爬
如果需要修改则可以次方法或者在setting中修改RETRY_HTTP_CODES
def process_exception(self, request, exception, spider):
默认对一组出错情况的列表进行筛选,符合则执行重爬
处理好这两个方法基本能处理爬取出错的情况。