Python爬虫错误重试,超时处理
错误重试用到的方法之一是:@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爬虫错误重试,超时处理相关推荐
- python爬虫网络请求超时_python总urllib,伪装,超时设置,异常处理的方法
python爬虫之urllib,伪装,超时设置,异常处理的方法 Urllib 1. Urllib.request.urlopen().read().decode() 返回一个二进制的对象,对这个对象进 ...
- python爬虫下载重试_python爬虫多次请求超时的几种重试方法(6种)
第一种方法 headers = Dict() url = 'https://www.baidu.com' try: proxies = None response = requests.get(url ...
- python爬虫网络请求超时是什么意思_python爬虫怎么处理异常和超时?
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 写代码总是会出异常的,尤其是爬虫这类程序,无法确保每次请求都能稳定地返回统一的结果,比如反爬虫策略提升.代理IP超时.程序异常等等,处理好这些问题,才能保 ...
- python爬虫网络请求超时_6、web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求...
利用python系统自带的urllib库写简单爬虫 urlopen()获取一个URL的html源码 read()读出html源码内容 decode("utf-8")将字节转化成字符 ...
- python爬虫网络请求超时_Python网络爬虫编写5-使用代理,处理异常和超时
# coding=utf-8 "' 从同一个地址发出的http请求过多过频繁,都可能被网站给封掉 要解决这个问题,就需要不停地更换代理 同时,如果在用urllib2访问url的时候出现错误 ...
- 【Python爬虫错误】ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接
今天写爬虫爬取天天基金网站(http://fund.eastmoney.com/)时出现如下图所示的错误. 分析原因,是因为使用urlopen方法太过频繁,引起远程主机的怀疑,被网站认定为是攻击行为. ...
- python爬虫网络请求超时是什么意思_爬虫请求超时设置
在本机网络状况不好或者服务器网络响应延迟甚至无响应时,我们可能会等待很久才能收到响应,甚至到最后收不到响应而报错.为了防止服务器不能及时响应,应该设置一个超时时间,即超过了这个时间还没有得到响应,那就 ...
- 【python爬虫错误】Max retries exceeded with url
Max retries exceeded with url 寻找可用的ip 寻找可用的ip import time from lxml import html # 把lxml是解析xml语言的库 et ...
- 饱暖思淫欲之美女图片的Python爬虫实例(二)
美女图片的Python爬虫实例:面向服务器版 ==该爬虫面向成年人且有一定的自控能力(涉及部分性感图片,仅用于爬虫实例研究)== 前言 初始教程 存在问题 解决思路 目标 实现步骤 硬件配置 服务器信 ...
- python爬虫超时重试_Python爬虫实例(三):错误重试,超时处理
错误重试 错误重试用到的方法之一是:@retry()装饰器html 装饰器实际是一个python函数,它的做用就是为被装饰的函数(或对象)进行装饰.包装,可让被装饰的函数(或对象)在不须要作任何代码改 ...
最新文章
- Confusion matrix
- js中匿名函数的N种写法
- 基于zynq的千兆网udp项目_随时随地感受“沉浸式千兆体验”!海南互联网络迈入“三千兆”时代...
- 智慧工厂如何运转?飞凌FCU2303-5G智能网关来告诉你
- FileUpload 控件 禁止手动输入
- Android之自定义 ActionBar 上的菜单(Menu)文字颜色
- osgi 模块化_OSGI –模块化您的应用程序
- java 控制jsp_JSP学习之Java Web中的安全控制实例详解
- 520送书,8本你爱的技术书籍免费领!
- 我从创立3家科技公司的经历中学到了什么
- 总裁徐雷“接管”京东 但拍板的仍是刘强东
- c语言cin cou头文件,c+第五次实验
- 流模型 操作 xml
- linuxcan接口测试
- 【OR】YALMIP 鲁棒优化
- 树莓派python调用摄像头拍照
- NamedParameterJdbcTemplate传参的n种写法
- Java中的数组注意点
- disallow .php,一次解决discuz只收录首页,不收录内页的问题,景安虚拟主机discuz帖子伪静态设置解决办法...
- 本地IIS启动后网页HTTP 错误 404.3 - Not Found解决方案