Python rmproxy 包完整使用指南
一、rmproxy 包概述
1. 核心介绍
rmproxy是一款轻量级代理管理、代理检测、代理筛选、代理清洗的 Python 第三方工具库,主要面向代理IP批量验证、无效代理剔除、代理池维护、代理格式解析场景。
主打功能:快速检测 HTTP/HTTPS/SOCKS 代理可用性、延迟测速、过滤高匿/普匿/透明代理、批量清理失效代理、代理格式标准化转换,广泛用于爬虫、网络请求、代理池运维等场景。
补充说明:该包仅专注代理IP检测与清洗,不实现代理服务搭建,区别于
proxy.py、mitmproxy(代理服务/抓包工具)。
2. 适用环境
- 支持 Python 3.6+
- 跨平台:Windows / Linux / macOS
- 依赖:
requests、socket、time(部分版本自动预装依赖)
二、安装方式
1. 标准 pip 安装(推荐)
# 正式版安装pipinstallrmproxy# 国内镜像加速(推荐,解决下载慢)pipinstallrmproxy-ihttps://pypi.tuna.tsinghua.edu.cn/simple2. 离线/源码安装
- 前往 PyPI rmproxy 下载
.whl/.tar.gz包 - 本地安装:
# whl 包pipinstallrmproxy-xxx.whl# 源码包tar-zxvfrmproxy.tar.gzcdrmproxy python setup.pyinstall3. 版本查看
pip show rmproxy三、核心语法、类、方法与参数详解
rmproxy核心入口为ProxyChecker主类,所有检测、筛选、清理功能均基于该类实现。
1. 基础导入
fromrmproxyimportProxyChecker2. ProxyChecker 初始化参数
checker=ProxyChecker(timeout:int=10,# 全局超时时间(秒),代理连接超时判定test_url:str="",# 自定义测速/检测目标URL(默认内置公网测速地址)proxy_type:str="http",# 代理类型:http / https / socks4 / socks5anonymous:str="all",# 匿名等级:all/transparent/anonymous/highthread_num:int=20,# 并发检测线程数retry:int=1# 检测失败重试次数)参数详细说明
| 参数 | 类型 | 取值 & 说明 |
|---|---|---|
timeout | int | 单代理连接超时,建议 3~15,网络差调大 |
test_url | str | 自定义检测地址,如https://www.baidu.com |
proxy_type | str | 代理协议类型,必填区分协议 |
anonymous | str | 匿名等级过滤:transparent透明代理anonymous普通匿名high高匿代理all不限制 |
thread_num | int | 并发线程,批量检测建议 10~50,过高易触发封禁 |
retry | int | 连接失败重试次数,0=不重试 |
3. 核心常用方法
(1)check_one(proxy: str) -> dict
功能:检测单个代理可用性、延迟、匿名等级
- 入参:代理字符串,格式
ip:port/ip:port:user:pwd(带账号密码代理) - 返回:字典,包含状态、延迟、类型、匿名等级
返回字段说明
{"proxy":"1.1.1.1:8080",# 原代理"status":True/False,# 是否可用"delay":0.32,# 响应延迟(秒)"type":"http",# 代理协议"anonymous":"high",# 匿名等级"error":""# 错误信息,正常为空}(2)check_batch(proxy_list: list) -> list
功能:批量并发检测代理列表(最常用)
- 入参:代理字符串列表
["ip:port", ...] - 返回:全部代理检测结果列表
(3)remove_invalid(proxy_list: list) -> list
功能:一键剔除所有失效代理,只保留可用代理
- 入参:原始代理列表
- 返回:清洗后的有效代理列表(纯
ip:port格式)
(4)filter_by_delay(proxy_list: list, max_delay: float) -> list
功能:按最大延迟筛选低速代理,只保留响应更快的代理
max_delay:最大允许延迟(秒)
(5)parse_proxy(raw_str: str) -> str
功能:代理格式标准化
- 清洗杂乱字符、多余空格、前缀后缀,统一为
ip:port标准格式
(6)get_anonymous_type(proxy: str) -> str
功能:单独判断单个代理的匿名等级
四、8 个实战应用案例(可直接运行)
前置准备
所有案例统一导入包:
fromrmproxyimportProxyChecker案例1:检测单个 HTTP 代理可用性(基础入门)
场景:手动验证单个代理是否能用、查看延迟
# 初始化检测器checker=ProxyChecker(timeout=8,proxy_type="http")# 待检测代理proxy="120.79.15.101:8080"# 执行检测result=checker.check_one(proxy)print("检测结果:",result)ifresult["status"]:print(f"代理可用,响应延迟:{result['delay']}秒")else:print("代理失效,原因:",result["error"])案例2:批量检测代理列表 + 剔除无效代理(代理池基础清洗)
场景:爬虫拿到一批代理,批量过滤失效IP
# 原始代理列表proxy_list=["1.1.1.1:80","2.2.2.2:8080","3.3.3.3:3128","4.4.4.4:9999"]# 初始化,20线程并发检测checker=ProxyChecker(thread_num=20,timeout=6)# 一键移除无效代理valid_proxies=checker.remove_invalid(proxy_list)print("清洗后有效代理:")forpinvalid_proxies:print(p)案例3:按响应延迟筛选高速代理(优选低延迟IP)
场景:对有效代理进一步筛选,只保留延迟<1秒的高速代理
proxy_list=["111.222.33.44:8080","55.66.77.88:3128","99.88.77.66:80"]checker=ProxyChecker(thread_num=15)# 先清洗无效代理valid=checker.remove_invalid(proxy_list)# 筛选延迟 ≤1秒 的代理fast_proxies=checker.filter_by_delay(valid,max_delay=1.0)print("低延迟高速代理:",fast_proxies)案例4:检测 SOCKS5 类型代理(爬虫常用 socks 代理)
场景:验证 SOCKS5 隧道代理,区分协议类型
# 指定代理类型为 socks5checker=ProxyChecker(proxy_type="socks5",timeout=10)proxy="103.152.112.154:1080"res=checker.check_one(proxy)print(f"SOCKS5代理状态:{res['status']},延迟:{res['delay']}")案例5:筛选高匿代理(反爬严格场景专用)
场景:爬虫防封禁,只保留高匿代理,过滤透明/普通匿名
proxy_list=["180.120.88.99:8080","203.0.113.50:3128","198.51.100.20:80"]# 限定只检测高匿代理checker=ProxyChecker(anonymous="high",proxy_type="http")# 批量检测results=checker.check_batch(proxy_list)# 遍历打印高匿可用代理foriteminresults:ifitem["status"]:print(f"高匿可用代理:{item['proxy']},延迟:{item['delay']}")案例6:代理格式标准化清洗(处理杂乱文本代理)
场景:从网页/文本复制的代理带空格、多余符号,统一格式化
checker=ProxyChecker()# 杂乱格式代理(带空格、多余字符)raw_proxy1=" 124.222.181.220 : 8080 "raw_proxy2="ip:139.196.86.186,port:80"# 格式解析std1=checker.parse_proxy(raw_proxy1)std2=checker.parse_proxy(raw_proxy2)print("标准化后1:",std1)print("标准化后2:",std2)案例7:带账号密码的授权代理检测
场景:付费代理(需账号密码认证)检测可用性
格式规则:ip:port:username:password
checker=ProxyChecker(proxy_type="http",timeout=8)# 带账号密码代理auth_proxy="123.123.123.123:8080:user123:pwd456"res=checker.check_one(auth_proxy)print("授权代理检测结果:",res)案例8:结合文件读取,批量清洗本地代理文本(工程化用法)
场景:本地proxy.txt存储大量代理,自动读取→检测→保存有效代理
fromrmproxyimportProxyChecker# 1. 读取本地代理文件defread_proxy_file(path):withopen(path,"r",encoding="utf-8")asf:return[line.strip()forlineinfifline.strip()]# 2. 写入有效代理到新文件defsave_valid_proxy(proxy_list,path):withopen(path,"w",encoding="utf-8")asf:forpinproxy_list:f.write(p+"\n")# 主逻辑if__name__=="__main__":# 读取原始代理raw_proxies=read_proxy_file("proxy.txt")# 初始化检测器checker=ProxyChecker(thread_num=30,timeout=7)# 清洗无效代理valid=checker.remove_invalid(raw_proxies)# 保存结果save_valid_proxy(valid,"valid_proxy.txt")print(f"原始代理{len(raw_proxies)}个,有效代理{len(valid)}个")五、常见错误、报错原因与解决方案
1. 报错ModuleNotFoundError: No module named 'rmproxy'
- 原因:未安装包 / 多 Python 环境混淆
- 解决:
# 确认当前 pip 对应环境python-mpipinstallrmproxy
2. 所有代理均返回status: False(全检测失败)
常见原因:
proxy_type与实际代理协议不匹配(http 写成 socks5)- 本地网络无法连接外网/防火墙拦截
- 超时
timeout设置过小,网络延迟高 - 代理已全部失效
解决:
- 核对代理协议,修正
proxy_type - 调大
timeout=10~15 - 关闭本地防火墙/代理软件重试
3. 报错socket.timeout: timed out
- 原因:代理响应慢、网络波动、目标URL无法访问
- 解决:增大
timeout参数,更换test_url为稳定公网地址。
4. 并发过高导致程序卡顿/报错OSError: Too many open files
- 原因:
thread_num线程数设置过大,系统句柄耗尽 - 解决:调低并发线程,常规批量检测建议
thread_num=10~30。
5. 带账号密码代理检测失败
- 原因:格式错误,必须严格
ip:port:user:pwd,不能缺段、不能多空格 - 解决:先用
parse_proxy()标准化格式,再传入检测。
6.parse_proxy解析失败,返回空字符串
- 原因:原始文本无合法
IP:端口结构 - 解决:手动清理文本,确保包含标准 IP+端口。
六、使用注意事项 & 最佳实践
协议严格区分
HTTP/HTTPS/SOCKS4/SOCKS5 必须和代理实际类型一致,否则100%检测失效。线程数合理控制
个人电脑建议 10~30 线程;服务器可适当调高,禁止超过100,避免被运营商封禁IP。超时设置建议
国内代理:timeout=5~8;海外代理:timeout=10~15。匿名等级使用场景
- 普通爬虫:
anonymous普通匿名即可 - 高反爬站点、账号登录:必须
high高匿代理
- 普通爬虫:
不要高频批量检测
短时间大量请求同一检测URL,易被目标网站拉黑,可间隔 1~2 分钟分批检测。代理时效性
免费代理存活时间极短,建议先检测再使用,不要长期缓存代理列表。依赖兼容
若出现requests版本冲突,执行:pipinstall--upgraderequests安全提醒
公共免费代理存在窃听风险,切勿用于传输账号、密码、隐私数据。
《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章,前6章涵盖深度学习基础,包括张量运算、神经网络原理、数据预处理及卷积神经网络等;后5章进阶探讨图像、文本、音频建模技术,并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法,每章附有动手练习题,帮助读者巩固实战能力。内容兼顾数学原理与工程实现,适配PyTorch框架最新技术发展趋势。