爬虫动态代理ip配置清单:协议类型、地区参数与认证方式汇总
做爬虫的人都知道,IP 被封是绕不开的问题。单台机器连续请求,对方风控系统几分钟就能把你的出口 IP 拉黑。这时候,动态代理 IP就成了刚需——每换一个请求就换一个出口地址,让目标网站”看到”的都是不同的用户。
但代理 IP 不是”买了就能用”。协议选错、地区填不对、认证方式配漏一个字段,轻则请求超时,重则整条采集链路瘫痪。这篇文章把协议类型、地区参数、认证方式三大核心配置项拉通讲清楚,附 Python 代码示例,你可以直接当配置清单用。
一、协议类型:HTTP、HTTPS 还是 SOCKS5?
动态代理支持的协议决定了你的爬虫能走哪些链路。目前主流的就三类:
| 协议 | 默认端口 | 适用场景 | 加密支持 |
|---|---|---|---|
| HTTP | 8080 / 8888 | 网页抓取、API 调用 | 无(明文) |
| HTTPS | 443 / 8443 | 需要 TLS 的站点、金融类数据 | 有(TLS 1.2/1.3) |
| SOCKS5 | 1080 / 10808 | 全协议转发、非 HTTP 流量(如 FTP、数据库) | 可选(SOCKS5 over TLS) |
怎么选?如果你的爬虫 90% 以上都是抓 HTML 页面或调 REST API,HTTP 协议就够了,配置最简单、延迟最低。如果目标站强制 HTTPS 且你不想在本地做 TLS 终结,选 HTTPS 代理。如果你要同时抓网页、拉文件、甚至走 SSH,SOCKS5 是最通用的”万能隧道”。
一个实用原则:能用 HTTP 就别上 SOCKS5,因为 SOCKS5 多一层转发,延迟通常多 20-50ms。但如果你用 Scrapy 且需要兼容多种中间件,SOCKS5 的兼容性确实更省心。
二、地区参数:从国家到城市,粒度怎么定?
动态代理的”动态”体现在 IP 轮换上,但”地区”决定了你从哪个城市的机房出去。这个参数直接影响两件事:
- 目标站的地理限制:比如抓某海外电商的本地化页面,IP 必须落在对应国家甚至城市。
- 延迟与稳定性:IP 离目标服务器越近,RTT 越低,超时率越低。
常见的地区参数层级:
| 参数 | 示例值 | 说明 |
|---|---|---|
| country | US / GB / JP / CN | ISO 3166-1 两位国家代码 |
| state / province | California / 广东 | 一级行政区,部分服务商支持 |
| city | Los Angeles / 深圳 | 城市级,粒度最细 |
| rotation | per_request / per_session | 每次请求换 IP 还是会话内固定 |
| pool_size | 50 / 200 / 500 | 从多大的 IP 池里抽取 |
实际配置建议:
- 抓国内站点 → country 设
CN,城市按目标服务器所在地选(比如目标在阿里云华东节点,就选上海/杭州)。 - 抓海外站点 → 精确到城市,避免同一国家不同城市的 IP 被风控标记为”异常跳转”。
- 并发量大的任务 → pool_size 拉大到 200+,减少同一 IP 被短时间复用的概率。
⚠️ 注意:光络云的海外代理节点需要你的服务器具备海外网络环境才能正常连通(TikTok 专线产品除外)。如果你的爬虫跑在国内机房,建议优先使用光络云的国内节点,或者将爬虫部署到海外 VPS 上再走海外代理。
三、认证方式:三种主流方案怎么选?
代理服务商给你分配资源后,你的爬虫需要”证明身份”才能使用这些 IP。目前行业里就三种认证方式:
1. 用户名 + 密码(最通用)
每个代理 IP 绑定一组 username:password,写在请求头里。优点是任何语言、任何框架都能用,不依赖出口 IP,换机器部署不用改配置。缺点是密码写在代码或环境变量里有泄露风险,生产环境建议用密钥管理服务。
2. IP 白名单(最安全)
把你的服务器出口 IP 加到服务商的白名单里,请求时不需要任何密码,对方看到来源 IP 在白名单内就直接放行。适合出口 IP 固定的场景(比如一台云服务器长期跑爬虫)。缺点是换服务器或弹性扩容时要重新加白,灵活性稍差。
3. Token / API Key(适合平台化调用)
通过 API 获取一个有时效的 Token,每次请求带上 Token 鉴权。适合你的爬虫不是直接连代理,而是通过一个中间调度服务(比如自建的 IP 池管理平台)来分发代理的场景。Token 过期自动失效,安全性最好,但多了一次 API 调用。
四、Python 配置代码示例
下面给出三种协议在 Python 中的典型配置写法,以 requests 和 Scrapy 为例:
# ===== HTTP 代理(requests)=====
import requests
proxies = {
"http": "http://user_abc123:pass_x7k9@203.0.113.50:8080",
"https": "http://user_abc123:pass_x7k9@203.0.113.50:8080",
}
resp = requests.get("https://example.com/data", proxies=proxies, timeout=10)
print(resp.status_code)
# ===== SOCKS5 代理(需要 pip install pysocks)=====
proxies_socks = {
"http": "socks5://user_abc123:pass_x7k9@198.51.100.20:1080",
"https": "socks5h://user_abc123:pass_x7k9@198.51.100.20:1080",
}
# 注意:socks5h 表示 DNS 也走代理,避免本地 DNS 泄露真实位置
resp = requests.get("https://example.com/data", proxies=proxies_socks, timeout=10)
# ===== Scrapy 配置(settings.py)=====
# HTTP 代理
HTTP_PROXY = "http://user_abc123:pass_x7k9@203.0.113.50:8080"
# 如果需要每次请求换 IP(动态代理自带轮换)
# 只需配置一个入口地址即可,后端自动分配不同出口
PROXY_LIST = [
"http://user_abc123:pass_x7k9@203.0.113.50:8080",
"http://user_abc123:pass_x7k9@203.0.113.51:8080",
]
地区参数通常不是写在代理地址里,而是通过服务商的 API 或管理面板预先绑定。比如你在光络云后台创建代理池时选择”美国-洛杉矶”,拿到的入口地址就只会在洛杉矶的 IP 里轮换,代码侧不需要额外传 country 参数。
IP 白名单认证的代码侧几乎无感知——不需要写 username/password,直接填代理地址就行:
# IP 白名单模式:无需认证信息
proxies = {
"http": "http://203.0.113.50:8080",
"https": "http://203.0.113.50:8080",
}
五、配置检查清单(部署前过一遍)
| 检查项 | 要点 |
|---|---|
| 协议与端口匹配 | HTTP 走 8080,SOCKS5 走 1080,别混着填 |
| SOCKS5 用 socks5h | 避免本地 DNS 泄露真实出口 |
| 地区与目标站一致 | 抓日本站就用日本 IP,别用美国 IP 硬套 |
| 轮换策略匹配业务 | 登录态页面用 per_session,纯抓取用 per_request |
| 认证信息走环境变量 | 别硬编码在代码里,用 os.environ 读取 |
| 超时与重试 | 代理链路多一跳,timeout 建议设 10-15s,配 2 次重试 |
| 海外节点网络环境 | 光络云海外代理需服务器有海外网络(TikTok 专线除外) |
常见问题
Q: 动态代理和静态代理怎么选?爬虫场景用哪种?
爬虫场景 95% 的情况用动态代理就够了。动态代理每次请求(或每个会话)分配不同出口 IP,天然规避单 IP 被限流或封禁。静态代理(固定 IP)更适合需要”稳定身份”的场景,比如模拟一个长期用户。如果你的爬虫是高频抓取、多站点轮询,动态代理是首选。
Q: 为什么我的 HTTP 代理连 HTTPS 站点报 SSL 错误?
这通常是因为你用了 http:// 前缀的代理去访问 https:// 站点,但代理本身不支持 CONNECT 隧道。确认你的代理服务商是否支持 HTTPS CONNECT(绝大多数正规服务商都支持)。如果确实不支持,换 SOCKS5 协议可以绕过这个问题,因为 SOCKS5 是纯 TCP 转发,不解析上层协议。
Q: 光络云的代理 IP 怎么开通和使用?
光络云是全球网络基础设施及数据服务商,提供国内和海外双区域代理节点。你可以在光络云官网注册后,在管理后台创建代理池、选择地区和协议、配置认证方式,拿到入口地址后直接填到爬虫代码里即可。海外节点需要你的服务器具备海外网络环境才能连通(TikTok 专线产品不受此限制)。具体套餐和节点详情建议到光络云官网查看最新信息。
Q: 一个代理 IP 能同时支撑多少并发?
这取决于目标站的限流策略,而不是代理本身。一般来说,单个出口 IP 对同一个目标站保持 5-10 个并发比较安全。如果你的任务需要高并发(比如 100+ QPS),应该把 pool_size 拉大,让动态代理在更大池子里轮换,摊薄单 IP 的负载。
Q: 用了代理 IP 之后还需要加请求头伪装吗?
需要。代理解决的是”IP 维度”的识别,但 User-Agent、Accept、Cookie 等 HTTP 头如果全部一样,目标站的风控依然能通过”行为指纹”识别出你是爬虫。建议配合随机 User-Agent、合理的请求间隔(1-3 秒)和真实的浏览器头组合使用,效果比单纯换 IP 好很多。
