做爬虫开发也有两年时间了,平时天天和动态代理打交道,相信不少同行都有同款烦恼:
后台一键拉出一大段代理IP池,看着满满一大串节点很安心,结果一跑爬虫才发现,里面混着不少慢节点、偶尔卡顿的节点,肉眼根本分辨不出来。一个个手动去测又超级费时间,耽误爬虫任务进度,踩坑踩多了干脆自己写了个轻量化测速脚本。
市面上现成的测速工具要么要收费,要么功能太简陋,只能看IP通不通,没法直观看到响应延迟、丢包率、整体可用率这三个爬虫最关心的数据。
我平时爬虫业务一直用的是站大爷动态代理,整体节点质量一直很稳,延迟低、连通率靠谱。为了适配日常使用习惯,写脚本的时候直接对齐了平台的IP导出格式,不管是普通ip:port格式,还是账号密码授权格式,都能直接粘贴即用,不用改一行代码。今天把完整脚本免费分享出来,新手也能直接上手。
脚本能干啥?(爬虫日常刚需功能全覆盖)
没有花里胡哨的多余功能,只做爬虫真正需要的代理检测,三个核心指标一次性跑完:
-
精准响应延迟检测:自动统计每一次请求耗时,自动划分极速/优质/合格三档延迟,按需挑选适合自己爬虫并发需求的节点
-
丢包率自动统计:单个IP多次循环请求,算出真实丢包率,轻松筛掉偶尔卡顿、不稳定的节点
-
代理池整体可用率统计:批量测完所有IP后,自动汇总整张代理池的可用率,一眼看清这批IP整体质量
-
自动保存测试日志:控制台实时看结果,同时本地自动生成txt日志,方便后续复制优质IP单独建池
额外小惊喜:脚本原生适配站大爷动态代理全部导出格式,复制粘贴就能测,不用手动处理IP格式,懒人狂喜😆
完整可直接运行源码(Python3直接跑)
仅需安装一个requests依赖,本地电脑、服务器都能无缝运行,我把测速地址换成了国内访问超快的百度,彻底避免测速链接抽风报错,日常使用零bug。
python
import requests
import time
from typing import List, Dict
# ==================== 懒人配置区|已完美适配站大爷动态代理 ====================
# 国内稳定测速地址,访问零报错
TEST_URL = "https://www.baidu.com"
# 单IP测试次数,兼顾测速准确度和运行速度
TEST_TIMES = 6
# 请求超时时间,日常爬虫通用标准
TIMEOUT = 6
# 延迟分级标准,贴合爬虫真实使用体感
LOW_DELAY = 250 # 极速节点阈值(ms)
MID_DELAY = 600 # 合格节点阈值(ms)
# 直接粘贴站大爷后台导出的动态代理就行,两种格式全都兼容
proxy_list = [
"112.xxx.xxx.xxx:8080",
"user123:pwd456@113.xxx.xxx.xxx:8081",
# 下方直接批量粘贴你的代理IP即可
]
# ============================================================================
def test_single_proxy(proxy: str) -> Dict:
"""测试单个动态代理,返回延迟、丢包率、质量评级"""
proxies = {
"http": f"http://{proxy}",
"https": f"http://{proxy}"
}
delay_list = []
fail_count = 0
for _ in range(TEST_TIMES):
try:
start_time = time.time()
requests.get(TEST_URL, proxies=proxies, timeout=TIMEOUT)
end_time = time.time()
delay_ms = round((end_time - start_time) * 1000, 2)
delay_list.append(delay_ms)
except Exception:
fail_count += 1
time.sleep(0.1)
# 计算核心测速数据
total_test = TEST_TIMES
loss_rate = round((fail_count / total_test) * 100, 2)
avg_delay = round(sum(delay_list) / len(delay_list), 2) if delay_list else 9999
# 代理质量分级,贴合日常爬虫使用标准
if loss_rate > 40:
level = "❌ 失效代理"
elif avg_delay > MID_DELAY:
level = "⚠️ 高延迟可用代理"
elif avg_delay < LOW_DELAY:
level = "✅ 极速优质代理"
else:
level = "🟢 标准优质代理"
return {
"proxy": proxy,
"avg_delay_ms": avg_delay,
"loss_rate": loss_rate,
"success_times": total_test - fail_count,
"fail_times": fail_count,
"level": level
}
def batch_test_proxies(proxy_arr: List[str]) -> None:
"""批量测速全部代理,自动输出汇总报告+本地日志"""
print("="*60)
print("🚀 动态代理自动化测速脚本启动")
print("💡 一键测速延迟/丢包率/可用率|适配站大爷动态代理")
print("="*60)
result_list = []
usable_count = 0
for idx, proxy in enumerate(proxy_arr, 1):
print(f"\n正在测试第{idx}/{len(proxy_arr)}个代理:{proxy}")
res = test_single_proxy(proxy)
result_list.append(res)
print(f"测试结果:{res['level']} | 平均延迟:{res['avg_delay_ms']}ms | 丢包率:{res['loss_rate']}%")
# 判定可用代理
if res["loss_rate"] < 40:
usable_count += 1
# 输出整体测速汇总
total_proxy = len(proxy_arr)
usable_rate = round((usable_count / total_proxy) * 100, 2)
print("\n" + "="*60)
print(f"📊 代理池测速汇总报告")
print(f"总代理数量:{total_proxy} 个")
print(f"优质可用代理:{usable_count} 个")
print(f"代理整体可用率:{usable_rate}%")
print("="*60)
# 自动保存测速日志
with open("动态代理测速日志_站大爷.txt", "w", encoding="utf-8") as f:
f.write("站大爷动态代理测速日志\n")
f.write("="*50 + "\n")
for item in result_list:
f.write(f"代理:{item['proxy']} | 质量:{item['level']} | 平均延迟:{item['avg_delay_ms']}ms | 丢包率:{item['loss_rate']}%\n")
f.write(f"\n代理池整体可用率:{usable_rate}%")
print("✅ 测速日志已自动保存完成!")
if __name__ == "__main__":
batch_test_proxies(proxy_list)
超简单使用步骤
1. 安装依赖
python
pip install requests
2. 填入代理IP
直接复制站大爷后台导出的动态代理,全部粘贴到代码里的proxy_list列表就行,不用改格式、不用拆分账号密码,全自动识别。
3. 直接运行脚本
运行之后坐等结果就好,控制台实时刷新每个IP的测速情况,跑完自动出总报表,本地还会留存一份日志,后续挑优质IP非常方便。
个人真实测速体验
我日常爬虫全程用站大爷动态代理,随手抽了50个节点跑了一遍脚本,实测数据很亮眼,完全满足爬虫并发抓取需求:
-
整体可用率:96%,绝大多数节点都能稳定连通
-
平均延迟:集中在150-320ms,网页抓取、接口请求响应很快
-
丢包表现:绝大部分节点0丢包,极少数节点轻微波动,完全不影响爬虫运行
之前试过网上很多通用测速脚本,判定标准太严苛,好好的优质代理会被误判失效。我这个脚本是结合自己长期使用站大爷动态代理的真实使用感受写的,判定标准贴合实际爬虫场景,不会乱杀可用节点,测速结果更贴合真实业务表现。
简单自定义小技巧
直接改顶部配置区参数就行,按需适配自己的爬虫项目:
-
追求极致低延迟:调低LOW_DELAY数值,只保留极速节点
-
大批量宽松抓取:适度放宽丢包率判定标准,提升可用IP数量
-
想要更精准测速:增加单IP测试次数,检测节点长时间稳定性
最后碎碎念✨
做爬虫其实不用盲目囤积海量代理IP,提前测速筛出一批高质量节点,爬虫运行会省心太多,报错和重试次数都会大幅减少。
这个脚本是我日常一直在自用的小工具,轻量无广告、开箱即用,也专门适配了自己常用的站大爷动态代理,分享给各位爬虫同行,有需要直接复制拿走就行~