当前位置:首页>python>Python爬虫教程34:如何在访问网址失败后,间隔(2秒、3秒)进行重试

Python爬虫教程34:如何在访问网址失败后,间隔(2秒、3秒)进行重试

  • 2026-10-11 07:37:41
Python爬虫教程34:如何在访问网址失败后,间隔(2秒、3秒)进行重试

Python,速成心法

敲代码,查资料,问Ai

练习,探索,总结,优化

★★★★★博文创作不易,使用代码的过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞+收藏分享+置顶,小红牛在此表示感谢。★★★★★

---------★爬虫系列教程★----------

Python爬虫教程33:you-get爬虫利器,一行代码实现,视频+音频+图片的下载

Python项目21:双色球历史数据爬虫+数据分析小工具

Python爬虫教程32:东财上面获取,股票行业板块的名称+代码数据(json解析)

Python爬虫教程31:requests手动指定网页编码+自动检测的方法

Python爬虫教程30:Selenium网页元素,定位的8种方法!

Python爬虫教程29:使用fake_useragent模块,随机生成User Agent字符串

Python教程69:解密JavaScript中,常见的加密方法

Selenium教程05:使用webdriver-manager自动下载浏览器驱动,再也不用担心driver版本的问题了

Python爬虫教程28:聊聊反爬爬虫经常遇到的问题及解决方法

Python爬虫教程27:秀啊!用Pandas 也能爬虫??

Python爬虫教程26:selenium使用stealth.min.js文件,隐藏浏览器指纹特征

Python入门教程41:Requests模块

Python入门教程36:urllib网页请求模块的用法

Python爬虫教程24:酷狗音乐热门榜单,歌曲歌词下载

Python爬虫教程23:代理ip的采集与效验方法

Python爬虫教程22:彼岸壁纸

Python爬虫教程21:查询链家网北京二手房源信息

Python爬虫教程20:ip138.com手机号码,归属地查询

Python爬虫教程19:B站音频+视频下载

Python爬虫教程18:去古诗文网下载,孙子兵法十三篇

Python爬虫教程17:下载快手视频

Python爬虫教程16:下载百度图片

Python爬虫教程15:下载英雄联盟皮肤

Python爬虫教程14:下载喜马拉雅,郭德纲相声音频

Python爬虫教程12:从b站获取神仙姐姐的视频弹幕内容

Python爬虫教程12:使用urlretrieve下载王者荣耀英雄皮肤

Python爬虫教程11:使用正则表达式爬取高清壁纸

Python爬虫教程10:使用json解析股票数据,并画上证指数K线图

Python爬虫教程09:使用Json解析艺恩娱数网票房数据可视化

Python爬虫教程08:使用json解析中国气象局的天气数据

Python爬虫教程07:教你拿下必应词典的数据的3种方式

Python爬虫教程06:使用xpath和正则表达式采集豆瓣250数据

Python爬虫教程05:优化《所有页》古装美女下载代码

Python爬虫教程04:下载《所有页》古装美女图片

Python爬虫教程03:下载《第1页》古装美女的图片

以下是一个 Python 示例,演示如何在访问网址失败后按递增间隔(2秒、3秒)进行重试,成功后立即停止。有些网页设限的访问频率比较高,可以用延时请求试试。

代码说明:
max_retries=2 表示最多重试2次,加上首次尝试共3次访问。
retry_delays = [2, 3] 分别对应第1次重试前等待2秒,第2次重试前等待3秒。
使用 requests.get 发起请求,timeout 避免无限等待。
response.raise_for_status() 会在状态码非2xx时抛出异常,视为失败。
捕获 RequestException(包括网络错误、超时、HTTP错误等),根据当前尝试次数决定是否等待并重试。
重试次数用尽后,重新抛出异常,由上层调用者处理。
你可以将 url 替换为实际网址进行测试。如果希望自定义成功条件(例如仅认为200成功),可以修改 response.raise_for_status() 或增加额外判断。

↓ 完整源码如下 ↓

import requestsimport timedef fetch_url_with_retry(url, max_retries=2):    """    尝试访问网址,失败后自动重试。    :param url: 目标网址    :param max_retries: 最大重试次数(此处设为2,即最多尝试3次)    """    retry_delays = [2, 3]  # 第一次重试前等待2秒,第二次重试前等待3秒    for attempt in range(max_retries + 1):  # attempt: 0, 1, 2        try:            response = requests.get(url, timeout=5)            # 如果状态码表示成功(2xx),则认为访问成功            response.raise_for_status()  # 非2xx会抛出HTTPError异常            print(f"访问成功!状态码:{response.status_code}")            return response        except requests.exceptions.RequestException as e:            print(f"第{attempt + 1}次访问失败:{e}")            if attempt < max_retries:  # 如果还有重试机会                wait_time = retry_delays[attempt]                print(f"等待 {wait_time} 秒后重试...")                time.sleep(wait_time)            else:                print("已达最大重试次数,放弃访问。")                raise  # 重新抛出最后一次异常# 示例用法if __name__ == "__main__":    url = "https://httpbin.org/status/500"  # 模拟返回500错误    # url = "https://httpbin.org/get"       # 正常网址    try:        result = fetch_url_with_retry(url)        # 成功后可进一步处理 result.content 等    except Exception:        print("最终未能获取到有效响应。")

也可以参考以下示例写法

def get_stock_bwdd_jsdata(self, symbol, date, amount_threshold=200):    url = "你的网址...."    params = {        "symbol": symbol,        "num": 10000,        "page": 1,        "sort": "ticktime",        "asc": 0,        "volume": 0,        "amount": amount_threshold * 10000,        "type": 0,        "day": date    }    headers = {        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",        "Referer": f"https://vip.stock.finance.sina.com.cn/quotes_service/view/cn_bill.php?symbol={symbol}",    }    # 重试延时策略:第一次不等待,之后分别等待2秒、3秒    delays = [0, 2, 3]   # 共3次尝试机会    for attempt, wait_sec in enumerate(delays):        if attempt > 0:   # 非首次请求,先等待对应秒数            time.sleep(wait_sec)            print(f"【{symbol}】第{attempt}次重试,等待 {wait_sec} 秒后重新请求")        try:            response = requests.get(url, params=params, headers=headers, timeout=15)            response.raise_for_status()            # 请求成功,记录日志并返回数据            self.log_api_request(symbol, date, amount_threshold, "请求成功", is_error=False)            return response.json()        except Exception as e:            # 记录本次失败日志            error_msg = f"请求失败 (尝试 {attempt+1}/{len(delays)}): {e}"            self.log_api_request(symbol, date, amount_threshold, error_msg, is_error=True)            # 如果是最后一次尝试,则抛出异常            if attempt == len(delays) - 1:                raise Exception(f"股票 {symbol} 数据请求失败,已重试 {len(delays)-1} 次: {e}")            # 否则继续下一次循环

完毕!!感谢您的收看

------★★历史博文集合★★------

Python入门篇  进阶篇  视频教程  Py安装

py项目Python模块 Python爬虫  Json

Xpath正则表达式SeleniumEtreeCss

Gui程序开发TkinterPyqt5 列表元组字典

数据可视化 matplotlib  词云图Pyecharts

海龟画图PandasBug处理电脑小知识

自动化脚本编程工具NumPy CSVWeb

Pygame  图像处理  机器学习数据库

最新文章

随机文章