错误重试用到的方法之一是:@retry()装饰器

装饰器实际是一个python函数,它的作用就是为被装饰的函数(或对象)进行装饰、包装,可以让被装饰的函数(或对象)在不需要做任何代码改动的情况下增加一些额外的功能,即被装饰函数(对象)的增强版。

安装 
pipenv install retrying
————————————————
版权声明:本文为CSDN博主「linzhjbtx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/linzhjbtx/article/details/86581972

常用的参数有:

1、stop_max_attempt_number:在停止之前尝试的最大次数,最后一次如果还是有异常则会抛出异常,停止运行,默认为5次

2、stop_max_delay:比如设置成10000,那么从被装饰的函数开始执行的时间点开始,到函数成功运行结束或者失败报错中止的时间点,只要这段时间超过10秒,则停止重试(单位是毫秒)

3、wait_fixed:设置在两次retrying之间的停留时间,单位毫秒

4、wait_random_min和wait_random_max:用随机的方式产生两次retrying之间的停留时间。wait_random_min停留最短时间,默认为0,单位毫秒。wait_random_max停留最长时间,默认为1000,单位毫秒

6、retry_on_result:指定一个函数,如果指定的函数返回True,则重试;否则抛出异常退出(指定要在得到哪些结果的时候去retry,retry_on_result传入一个函数对象,在执行get_result成功后,会将函数的返回值通过形参result的形式传入retry_if_result_none函数中,如果返回值是None那么就进行retry,否则就结束并返回函数值)
————————————————

超时处理与retry装饰器的结合应用
爬虫请求中的timeout参数可以与retry装饰器结合使用。这样爬虫就可以避免偶然的网络波动导致的请求错误,会在设置的重试次数内重复发起请求。

import requests
from retrying import retry
 
 
# 全部报错才会报错,如果其中一次正常,则继续执行
# 两次retry之间等待2秒,重试5次
@retry(stop_max_attempt_number=5, wait_fixed=2000)
def get_request(url):
    response = requests.get(url, headers=headers, timeout=1)
    return response.content.decode()
 
 
headers = {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"}
url = "https://www.baidu.com/"
print(get_request(url))

上面的例子,每次请求的超时限制是1秒,如果超过1秒未返回响应,则会报错。报错之后,会间隔2秒后再重新发起请求。只要其中一次正常,就会继续执行;否则,如果5次全部报错,才会报错。

————————————————

捕捉异常
import requests
from retrying import retry
 
 
# 全部报错才会报错,如果其中一次正常,则继续执行
# 两次retry之间等待2秒,重试5次
@retry(stop_max_attempt_number=5, wait_fixed=1000)
def _get_request(url):
    response = requests.get(url, headers=headers, timeout=1)
    return response.content.decode()
 
 
def get_request(url):
    try:
        html_str = _get_request(url)
    except TimeoutError:  # 1
        html_str = 'TimeoutError'
    except:  # 2
        html_str = 'OtherError'
    return html_str
 
 
headers = {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"}
url = "https://www.baidu.com/"
print(get_request(url))
 
上面# 2处的except下面会出现“too broad exception clauses”(This inspection highlights too broad exception clauses such as no exception class specified, or specified as 'Exception'.)这是由于# 2处的except没有指定具体的报错类型,所以会出现exception过于宽泛的提示。
————————————————
版权声明:本文为CSDN博主「linzhjbtx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/linzhjbtx/article/details/86581972

版权声明:本文为CSDN博主「linzhjbtx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/linzhjbtx/article/details/86581972

Python爬虫错误重试,超时处理相关推荐

  1. python爬虫网络请求超时_python总urllib,伪装,超时设置,异常处理的方法

    python爬虫之urllib,伪装,超时设置,异常处理的方法 Urllib 1. Urllib.request.urlopen().read().decode() 返回一个二进制的对象,对这个对象进 ...

  2. python爬虫下载重试_python爬虫多次请求超时的几种重试方法(6种)

    第一种方法 headers = Dict() url = 'https://www.baidu.com' try: proxies = None response = requests.get(url ...

  3. python爬虫网络请求超时是什么意思_python爬虫怎么处理异常和超时?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 写代码总是会出异常的,尤其是爬虫这类程序,无法确保每次请求都能稳定地返回统一的结果,比如反爬虫策略提升.代理IP超时.程序异常等等,处理好这些问题,才能保 ...

  4. python爬虫网络请求超时_6、web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求...

    利用python系统自带的urllib库写简单爬虫 urlopen()获取一个URL的html源码 read()读出html源码内容 decode("utf-8")将字节转化成字符 ...

  5. python爬虫网络请求超时_Python网络爬虫编写5-使用代理,处理异常和超时

    # coding=utf-8 "' 从同一个地址发出的http请求过多过频繁,都可能被网站给封掉 要解决这个问题,就需要不停地更换代理 同时,如果在用urllib2访问url的时候出现错误 ...

  6. 【Python爬虫错误】ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接

    今天写爬虫爬取天天基金网站(http://fund.eastmoney.com/)时出现如下图所示的错误. 分析原因,是因为使用urlopen方法太过频繁,引起远程主机的怀疑,被网站认定为是攻击行为. ...

  7. python爬虫网络请求超时是什么意思_爬虫请求超时设置

    在本机网络状况不好或者服务器网络响应延迟甚至无响应时,我们可能会等待很久才能收到响应,甚至到最后收不到响应而报错.为了防止服务器不能及时响应,应该设置一个超时时间,即超过了这个时间还没有得到响应,那就 ...

  8. 【python爬虫错误】Max retries exceeded with url

    Max retries exceeded with url 寻找可用的ip 寻找可用的ip import time from lxml import html # 把lxml是解析xml语言的库 et ...

  9. 饱暖思淫欲之美女图片的Python爬虫实例(二)

    美女图片的Python爬虫实例:面向服务器版 ==该爬虫面向成年人且有一定的自控能力(涉及部分性感图片,仅用于爬虫实例研究)== 前言 初始教程 存在问题 解决思路 目标 实现步骤 硬件配置 服务器信 ...

  10. python爬虫超时重试_Python爬虫实例(三):错误重试,超时处理

    错误重试 错误重试用到的方法之一是:@retry()装饰器html 装饰器实际是一个python函数,它的做用就是为被装饰的函数(或对象)进行装饰.包装,可让被装饰的函数(或对象)在不须要作任何代码改 ...

最新文章

  1. Confusion matrix
  2. js中匿名函数的N种写法
  3. 基于zynq的千兆网udp项目_随时随地感受“沉浸式千兆体验”!海南互联网络迈入“三千兆”时代...
  4. 智慧工厂如何运转?飞凌FCU2303-5G智能网关来告诉你
  5. FileUpload 控件 禁止手动输入
  6. Android之自定义 ActionBar 上的菜单(Menu)文字颜色
  7. osgi 模块化_OSGI –模块化您的应用程序
  8. java 控制jsp_JSP学习之Java Web中的安全控制实例详解
  9. 520送书,8本你爱的技术书籍免费领!
  10. 我从创立3家科技公司的经历中学到了什么
  11. 总裁徐雷“接管”京东 但拍板的仍是刘强东
  12. c语言cin cou头文件,c+第五次实验
  13. 流模型 操作 xml
  14. linuxcan接口测试
  15. 【OR】YALMIP 鲁棒优化
  16. 树莓派python调用摄像头拍照
  17. NamedParameterJdbcTemplate传参的n种写法
  18. Java中的数组注意点
  19. disallow .php,一次解决discuz只收录首页,不收录内页的问题,景安虚拟主机discuz帖子伪静态设置解决办法...
  20. 本地IIS启动后网页HTTP 错误 404.3 - Not Found解决方案

热门文章

  1. git分支创建与合并
  2. ServiceStack.Redis之IRedisClient(转载)
  3. SCP-bzoj-1000
  4. ubuntu 彻底卸载软件
  5. 作业 3 应用分支与循环结构解决问题
  6. 代码动态逍遥叹之狂学php
  7. 【模型转换】最少点的覆盖区间
  8. FLEX 与 VS 2008 利用 FluorineFx 开发快速配置演示
  9. 【二维码、条码识别】【Python+OpenCV】基于OpenCV库的二维码、条形码识别识别【含源码 1-1】
  10. Opencv中Get2D()与cvSet2D() 的坐标问题