ConnectionResetError(10054, ‘远程主机强迫关闭了一个现有的连接,Python爬虫

文章目录

  • ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接
    • 1.问题描述
    • 2.尝试的解决方法(均未生效)
      • 2.1 请求重试机制
      • 2.2 模拟浏览器请求头
      • 2.3 关闭连接资源
      • 2.4 延迟访问
    • 3.解决方案:使用 proxy_pool IP 代理池
    • 最后
    • 参考文章

ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接

1.问题描述

在进行爬虫开发时,频繁遇到以下报错:

Connection aborted: ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。')

这是由于目标服务器将爬虫行为识别为异常或恶意访问,触发了安全机制(如防火墙、WAF),从而强制关闭连接。

2.尝试的解决方法(均未生效)

2.1 请求重试机制

requests.get(url) 添加重试逻辑,如失败最多尝试 20 次。

for i in range(20):try:response = requests.get(url)breakexcept Exception as e:time.sleep(1)

2.2 模拟浏览器请求头

在请求中添加常见的 headers,如 User-AgentRefererAccept-Language 等。

headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',"Accept-Language": "zh-CN,zh;q=0.9"}

2.3 关闭连接资源

在请求后调用 response.close() 主动释放连接资源,防止连接堆积。

2.4 延迟访问

控制访问频率,如通过 time.sleep() 降低请求频率,依旧无效。

3.解决方案:使用 proxy_pool IP 代理池

最终通过引入 IP 代理池 解决了问题,避免了目标服务器根据 IP 频率封锁爬虫请求。

  • GitHub 地址:https://github.com/jhao104/proxy_pool
  • 项目名称:proxy_pool

配置步骤:

1、克隆项目并安装依赖

git clone https://github.com/jhao104/proxy_pool.git
cd proxy_pool
pip install -r requirements.txt

2、Redis本地配置一下

在这里插入图片描述

3、启动代理池服务

# 启动调度程序
python proxyPool.py schedule# 启动webApi服务     
python proxyPool.py server

4、代码中应用

封装两个功能,分别是获取IP和删除池子中的IP。

# proxypool ip池代理
PROXY_POOL_URL = "http://127.0.0.1:5010/get/"
def get_proxy():try:return requests.get("http://127.0.0.1:5010/get/").json().get("proxy")except Exception as e:print(f"[代理获取失败] {repr(e)}")return None
def delete_proxy(proxy):try:requests.get(f"http://127.0.0.1:5010/delete/?proxy={proxy}")except Exception as e:print(f"[代理删除失败] {repr(e)}")

实际应用,解决获取问题(代码仅保留逻辑信息,相关私密数据不保留):

def down_img(img_url, retry_count=30):ext = os.path.splitext(parse.urlparse(img_url).path)[1].lower().lstrip(".")if ext not in ["jpg", "jpeg", "png", "gif", "svg", "webp"]:ext = "jpg"image_dir = os.path.join(current_dir, "x", "x", "x", "x")os.makedirs(image_dir, exist_ok=True)image_name = (f"xxx")image_path = os.path.join(image_dir, image_name)while retry_count > 0:proxy = get_proxy() # 1.获取proxy ipif not proxy:print("Error:无可用代理,无法下载")return Noneproxies = {"http": f"http://{proxy}", "https": f"http://{proxy}"}try:with requests.get(img_url, proxies=proxies, timeout=10, stream=True) as response: # 2.获取链接相关数据response.raise_for_status()with open(image_path, "wb") as f: # 3.图片本地化for chunk in response.iter_content(chunk_size=8192):f.write(chunk)print(f"[成功] 下载图片到:{image_path}")return xxxxexcept Exception as e:retry_count -= 1delete_proxy(proxy)print(f"[最终失败] 无法下载图片:{img_url}")

实现成果:redis proxy_pool ip 存储 和 终端完成打印

在这里插入图片描述

在这里插入图片描述
Successful! 成功解决问题。

最后

  • 该类连接被重置的错误,单纯通过重试、伪装 UA 或请求头等手段已不足以绕过限制。
  • 使用高质量的 IP 代理池最有效,配合随机代理策略可提高爬虫的稳定性和成功率。

参考文章

1、https://blog.csdn.net/xunxue1523/article/details/104662965

2、https://www.cnblogs.com/AubeLiang/p/17756844.html

3、https://github.com/jhao104/proxy_pool

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/79362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis相关命令详解与原理(一)

目录 Redis是什么? Redis 的特点和功能 Redis工作模式 与MySQL的区别 安装编译和启动 redis的value类型编码 string类型 基础命令 应用 1.对象存储 2.累加器 3.分布式锁 4.位运算 list类型 基础命令 应用 1.栈(先进后出 FILO&#xff0…

Starrocks 的 ShortCircuit短路径

背景 本文基于 Starrocks 3.3.5 本文主要来探索一下Starrocks在FE端怎么实现 短路径,从而加速点查查询速度。 在用户层级需要设置 enable_short_circuit 为true 分析 数据流: 直接到StatementPlanner.createQueryPlan方法: ... OptExpres…

Oracle非归档模式遇到文件损坏怎么办?

昨天夜里基地夜班的兄弟,打电话说有个报表库连不上了,赶紧起来连上VPN查看一下,看到实例宕机了,先赶紧startup起来。 1.查看报错信息 环境介绍:Redhat 6.9 Oracle 11.2.0.4 No Archive Mode 查看alert log 关键报…

关于一些平时操作系统或者软件的步骤转载

关于一些平时操作系统或者软件的步骤转载 关于python环境搭建 关于Ubuntu 1. 双系统之Ubuntu快速卸载 2. VMware安装Ubuntu虚拟机实现COpenCV代码在虚拟机下运行教程 3. ubuntu 下 opencv的安装以及配置(亲测有效) 4. Ubuntu将c编译成.so文件并测试 5…

hz2新建Keyword页面

新建一个single-keywords.php即可,需要筛选项再建taxonomy-knowledge-category.php 参考:https://www.tkwlkj.com/customize-wordpress-category-pages.html WordPress中使用了ACF创建了自定义产品分类products,现在想实现自定义产品分类下的…

VRRP协议-IP地址冗余配置

有两个服务器172.16.42.1和172.16.42.121,通过VRRP协议使两台设备共用一个虚拟地址172.16.42.100,当 172.16.42.1 可用时,它会作为主路由器使用虚拟 IP 地址;当它不可用时,172.16.42.121 会接管虚拟 IP 地址&#xff0…

21、DeepSeekMath论文笔记(GRPO)

DeepSeekMath论文笔记 0、研究背景与目标1、GRPO结构GRPO结构PPO知识点**1. PPO的网络模型结构****2. GAE(广义优势估计)原理****1. 优势函数的定义**2.GAE(广义优势估计) 2、关键技术与方法3、核心实验结果4、结论与未来方向关键…

卡尔曼滤波算法(C语言)

此处感谢华南虎和互联网的众多大佬的无偿分享。 入门常识 先简单了解以下概念:叠加性,齐次性。 用大白话讲,叠加性:多个输入对输出有影响。齐次性:输入放大多少倍,输出也跟着放大多少倍 卡尔曼滤波符合这…

SolidWork-2023 鼠標工程

地址 https://github.com/MartinxMax/SW2023-Project/tree/main/mouse 鼠標

vue 组件函数式调用实战:以身份验证弹窗为例

通常我们在 Vue 中使用组件&#xff0c;是像这样在模板中写标签&#xff1a; <MyComponent :prop"value" event"handleEvent" />而函数式调用&#xff0c;则是让我们像调用一个普通 JavaScript 函数一样来使用这个组件&#xff0c;例如&#xff1a;…

Vite Proxy配置详解:从入门到实战应用

Vite Proxy配置详解&#xff1a;从入门到实战应用 一、什么是Proxy代理&#xff1f; Proxy&#xff08;代理&#xff09;是开发中常用的解决跨域问题的方案。Vite内置了基于http-proxy的代理功能&#xff0c;可以轻松配置API请求转发。 二、基础配置 在vite.config.js中配置…

图像画质算法记录(前言)

一、背景介绍 本篇主要是对图像画质增强相关&#xff0c;进行简单整理和记录。 二、整体流程 整体效果主要受到两部分影响&#xff1a; 1、前端isp处理。 2、后端画质增强。 三、isp常规流程 可以参考&#xff1a;刘斯宁&#xff1a;Understanding ISP Pipeline 四、后端画质…

Qt 中信号与槽(signal-slot)机制支持 多种连接方式(ConnectionType)

Qt 中信号与槽&#xff08;signal-slot&#xff09;机制支持 多种连接方式&#xff08;ConnectionType&#xff09; Qt 中信号与槽&#xff08;signal-slot&#xff09;机制支持 多种连接方式&#xff08;ConnectionType&#xff09;&#xff0c;用于控制信号发出后如何调用槽…

卷积神经网络实战(4)代码详解

目录 一、导包 二、数据准备 1.数据集 2. 标准化转换(Normalize) 3.设置dataloader 三、定义模型 四、可视化计算图&#xff08;不重要&#xff09; 五、评估函数 六、Tensorboard 一、导包 import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib i…

深入解析进程地址空间:从虚拟到物理的奇妙之旅

深入解析进程地址空间&#xff1a;从虚拟到物理的奇妙之旅 前言 各位小伙伴&#xff0c;还记得我们之前探讨的 fork 函数吗&#xff1f;当它返回两次时&#xff0c;父子进程中同名变量却拥有不同值的现象&#xff0c;曾让我们惊叹于进程独立性与写时拷贝的精妙设计。但你是否…

opencv处理图像(二)

接下来进入到程序线程设计部分 我们主线程负责图形渲染等操作&#xff0c;OpenGL的限制&#xff0c;opencv技术对传入图像加以处理&#xff0c;输出预期图像给主线程 QThread 我之前也是在想给opencv开一个专门的线程&#xff0c;但经过了解有几个弊端&#xff0c;第一资源浪…

学习threejs,使用Physijs物理引擎

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️Physijs 物理引擎1.1.1 ☘️…

ARCGIS PRO DSK 选择坐标系控件(CoordinateSystemsControl )的调用

在WPF窗体上使用 xml&#xff1a;加入空间命名引用 xmlns:mapping"clr-namespace:ArcGIS.Desktop.Mapping.Controls;assemblyArcGIS.Desktop.Mapping" 在控件区域加入&#xff1a; <mapping:CoordinateSystemsControl x:Name"CoordinateSystemsControl&q…

LangGraph(三)——添加记忆

目录 1. 创建MemorySaver检查指针2. 构建并编译Graph3. 与聊天机器人互动4. 问一个后续问题5. 检查State参考 1. 创建MemorySaver检查指针 创建MemorySaver检查指针&#xff1a; from langgraph.checkpoint.memory import MemorySavermemory MemorySaver()这是位于内存中的检…

深入理解Mysql

BufferPool和Changebuffer是如何加快读写速度的? BufferPool 在Mysql启动的时候 Mysql会申请连续的空间来存储BufferPool 每个页16kb 当控制块不足以存储信息的时候就会向后申请一个新的页 每个控制块都对应了一个缓存页 控制块占chunk的百分之5左右 LRU链表 Changebuffer …