直接用固定代理易被封,因反爬机制会记录IP频率、请求头、TLS指纹等;ProxyPool需校验剔除失效节点,且默认配置不支持HTTPS、内置爬虫常返回无效代理;必须修改PROXY_SCORE_MIN≥20、TEST_URL为https://httpbin.org/get、关闭CRAWLER_ENABLED并手动导入高质量代理。

为什么直接用固定代理很快被封
目标网站的反爬机制通常会记录同一 IP 的请求频率、请求头特征、TLS指纹甚至浏览器行为。哪怕你用了代理,如果只用一个 proxy,所有请求都打到同一个出口 IP,和直接用自己的宽带没本质区别——只是换了个被封的地址而已。
更麻烦的是,很多免费代理列表里的 http://xxx:port 格式代理存活时间极短,可能刚爬 10 次就返回 ConnectionRefusedError 或超时,导致 requests.exceptions.ProxyError 频发。
- 真实场景中,
ProxyPool不是“开箱即用”的代理源,它本身需要持续校验、剔除失效节点 - 默认配置下,
ProxyPool的api接口(如http://127.0.0.1:5555/random)返回的代理未必支持https,但多数目标站强制跳转https,结果就是requests.exceptions.SSLError - 它的内置爬虫(如从
kuaidaili.com抓取)在无User-Agent和Referer的情况下大概率返回空或验证码页面,导致入库代理全是无效的
如何让 ProxyPool 真正可用:三个必须改的配置项
ProxyPool 的 config.yaml 默认过于理想化。不改这三项,池子建了也等于没建。
-
PROXY_SCORE_MAX建议设为100(默认是100,但后续校验逻辑依赖它);真正关键的是PROXY_SCORE_MIN必须设为20以上,否则低分代理过早被淘汰,池子迅速枯竭 -
TEST_URL不能用默认的http://httpbin.org/get——它不走https,测不出代理对加密站的支持能力;应改为https://httpbin.org/get,并确保TEST_TIMEOUT≥10 -
CRAWLER_ENABLED默认为true,但内置爬虫域名大多已被封;建议关掉,改用手动维护或接入第三方 API(如ipidea.net的/api/entry?num=10&type=json®ion=),再通过python db.py -o insert批量导入
requests + ProxyPool 的安全调用模式
别直接把 get_proxy() 返回的字符串塞进 proxies=。要处理三类典型失败:
立即学习“Python免费学习笔记(深入)”;
- 代理返回
503 Service Temporarily Unavailable:说明该 IP 已被目标站临时限制,需立即降分(调用http://127.0.0.1:5555/decrease?proxy=xxx:port) - 出现
ReadTimeout或ConnectTimeout:不是网络问题,是代理本身响应慢,应主动调用/decrease并 sleep 0.5s 再重试 -
SSLError或CertificateError:代表代理不支持 TLS 握手,必须从池中移除(/delete?proxy=xxx:port),不能只降分
示例片段(非完整):
def fetch_with_proxy(url):
proxy = requests.get('http://127.0.0.1:5555/random').text.strip()
try:
r = requests.get(url, proxies={'https': f'https://{proxy}'}, timeout=10)
if r.status_code == 503:
requests.get(f'http://127.0.0.1:5555/decrease?proxy={proxy}')
return r
except (requests.exceptions.SSLError, ssl.CertificateError):
requests.get(f'http://127.0.0.1:5555/delete?proxy={proxy}')
raise
本地部署 ProxyPool 后仍被封?检查这三点
代理池只是工具链一环,不是银弹。以下问题常被忽略:
- 你的
requests请求头是否每次随机?固定User-Agent+ 动态IP= 被秒封。至少轮换User-Agent字段,Accept-Language和Sec-Ch-Ua也要同步更新 -
ProxyPool的api默认不鉴权,如果暴露在公网(比如云服务器没关防火墙),别人会把你辛苦攒的代理池当免费资源刷爆,导致你自己的请求被限流 - 某些站点(如知乎、微博)会校验
TLS fingerprint,普通requests发出的请求指纹高度一致,即使 IP 不同也会被识别为机器人——这时得换curl_cffi或playwright,而不是只换代理
代理池能缓解 IP 维度的封锁,但解决不了行为维度的识别。越复杂的站点,越要接受「没有全自动方案」这个事实。


















