https://github.com/jd/tenacity 是python生态里一个很棒的重试库,基本用法大家可去查看他们的官网
背景
要写个爬虫,要抓的数据是分页的,每次请求都带一个page参数,如果请求失败,就重试,重试的时候,page参数要保持,不能丢失
默认情况 tenacity 每次重试,都会用 函数首次传入的参数去重试, 如果我请求数据到23页,这时候报错, 它触发重试机制的话, 就会从第1页开始重试, 这没有意义
错误示范
错误示范截图
正确示范
正确示范截图
总结
其实就是 获取数据 专门独立为一个函数,里面不需要什么容错语句,就是单纯粗暴的获取数据并返回,然后给这个函数头上挂重试的装饰器,这样当这个函数被上游调用出错的时候,就会用参数page重试 (比如 正确示范里的 fetch_data 方法)
而上游的方法(比如 正确示范里的 fetch_all_data 方法 ),则必须 用循环的方式, 处理好 page, 每次用不同的参数 page 去调用有重试机制的函数