Python @retry装饰器的使用与实现案例(requests请求失败并重复请求)

news/2024/7/19 11:14:46 标签: python, 爬虫, json

爬虫代码的编写中,requests请求网页的时候常常请求失败或错误,一般的操作是各种判断状态和超时,需要多次重试请求,这种情况下,如果想优雅的实现功能,可以学习下retrying包下的retry装饰器的使用

安装:pip install retrying

 

在@retry()装饰器中,比较重要的几个参数如下:

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

wait_random_min:在两次调用方法停留时长,停留最短时间,默认为0,单位毫秒

wait_random_max:在两次调用方法停留时长,停留最长时间,默认为1000毫

retry_on_result:指定一个函数,如果指定的函数返回True,则重试,否则抛出异常退出

retry_on_exception: 指定一个函数,如果此函数返回指定异常,则会重试,如果不是指定的异常则会退出

这里只摘录几个常用的方法,想了解其他的方法,请自行查阅 

直接上例子:
# encoding:utf-8
import traceback
from retrying import retry
import requests
from user_agent import agert as ag
import random 
def _result(result):
return result is None


def header(header):
try:
if header != None:
header['User-Agent'] = random.choice(ag)
else:
header = {'User-Agent': random.choice(ag)}
return header
except Exception as e:
traceback.print_exc(e) 
@retry(stop_max_attempt_number=5, wait_random_min=1000, wait_random_max=2000, retry_on_result=_result)
def My_Request_Get(url, headers=None):
headers = header(headers)
# with open('./proxy_txt', 'r') as f:
# proxy = f.readline()
# proxy = json.loads(proxy)
# print proxy, type(proxy), '/*-'*10
response = requests.get(url, headers=headers, timeout=6)
if response.status_code != 200:
raise requests.RequestException('my_request_get error!!!!')
return response

 

 


 

转载于:https://www.cnblogs.com/fanjp666888/p/9796943.html


http://www.niftyadmin.cn/n/753986.html

相关文章

NAT原理及配置

文章目录NAT原理及配置NAT产生背景私网IP地址NAT技术原理NAT分类静态NAT静态NAT配置示例动态NAT动态NAT配置NAPTNAPT配置Easy IPEasy IP配置NAT Server(端口映射)NAT Server配置NAT原理及配置 NAT(网络地址转换) NAT产生背景 随…

TensorFlow学习之路1-TensorFlow介绍

TensorFlow是一个采用数据流图(data flow graphs),用于数据计算的开源软件库。 什么是数据流图? TensorFlow的数据流图是由“节点”(nodes)和“线”(edges)组成的有向无环图来描述数…

谷歌Google搜索语法

关键字详解site指定域名inurlURL中存在关键字的页面intext网页内容里的关键字Filetype指定文件类型intitle网页标题中的关键字link返回所有你指定域名的连接URL 如:link:baidu.cominfo查找指定站点的信息cache搜索Google里关于某些内容的缓存define搜索某个词的定义…

洛谷P3833 [SHOI2012]魔法树(树链剖分)

传送门 树剖板子…… 一个路径加和&#xff0c;线段树上打标记。一个子树询问&#xff0c;dfs的时候记录一下子树的区间就行 1 // luogu-judger-enable-o22 //minamoto3 #include<bits/stdc.h>4 #define ll long long5 using namespace std;6 #define getc() (p1p2&&…

渗透测试信息收集——CDN绕过

文章目录绕CDN查找真实IP1、如何判断目标存在 CDN 服务&#xff1f;2、网站真实IP2.1、不同IP访问查询2.2、 利用子域名请求获取真实IP2.3、第三方网站查验2.4、利用国外地址请求获取真实IP2.5、利用邮件服务器接口获取真实IP2.6、敏感文件2.7、利用黑暗引擎获取真实IP2.8、dns…

渗透测试信息收集概要

文章目录信息收集概要Whois查询指纹CMS网站IP旁站、C段服务器服务器操作系统版本、容器版本、数据库类型邮箱收集端口服务&#xff08;80、443等&#xff09;敏感文件搜索目录遍历说明.txt目录遍历说明.txt信息收集概要 Whois查询 联系人信息 邮箱反查域名 指纹CMS 人工、工…

esp8266网络自动对时 串口字符连接 并显示 12864i2c u8g2库

给别人定做的 做的 集成了 烟雾传感器dht11u8g2网络 自动对时 #include <dht11.h>//程序中调用了dht11的库#include <Arduino.h>#include <U8g2lib.h> #ifdef U8X8_HAVE_HW_SPI#include <SPI.h>#endif#ifdef U8X8_HAVE_HW_I2C#include <Wire.h>…

SQL注入—Access注入,Access偏移注入

Access注入&#xff0c;Access偏移注入 Access数据库组成 表名列名数据某accessasp注入靶场 iisaspaccess asp一般搭配access PHP一般搭配mysql aspx一般搭配msSQL注入的条件是能够传参、与数据库互动&#xff0c;数据交互 get&#xff0c;post&#xff0c;cookie都可以注入…