说实话,2026年还在裸奔跑python爬虫的,基本已经很少了。不是技术不行,是网络环境变了——目标站点的反爬策略越来越"聪明",你同一个IP连续请求个二三十次,轻则限流,重则直接封。这时候代理ip就不是"锦上添花",而是"没有它你根本跑不动"。
但代理ip这东西,水太深了。市面上从几块钱一百万到几百块一百万的都有,质量参差不齐。我前前后后测了不下七八家,踩的坑能写一本小册子。今天就把我总结出来的挑选逻辑和python端的接入方法,掰开了揉碎了讲给你听。不整虚的,全是实操。
先想清楚:你的爬虫到底需要哪种代理ip
很多人一上来就问"哪个代理ip便宜",这个问题本身就问错了。你得先搞清楚自己的场景,再决定用哪种类型的ip。我把它分成三档,你对照着看:
| 类型 | 存活时间 | 适合场景 | 核心优势 |
|---|---|---|---|
| 短效动态IP | 3~30分钟 | 高频采集、多任务并发、需要频繁换IP的场景 | 资源池大、更新快、延迟低 |
| 长效静态IP | 1~24小时 | 需要IP相对稳定的中低频采集、模拟真实用户行为 | IP纯净度高、去重效果好 |
| 固定IP | 长期不变 | 对稳定性要求很高、IP需求量不大的精细任务 | 连通率很高、几乎不掉线 |
举个例子,如果你写的是个价格监控脚本,每隔几分钟去抓一次竞品页面的价格,这种场景用短效动态ip就够了,反正每次请求换个IP,目标站点根本认不出你。但如果你做的是某平台店铺数据持续跟踪,需要让目标站点觉得"这是一个真实用户在同一台电脑上持续浏览",那长效静态ip甚至固定ip更合适,因为IP频繁跳变反而容易触发风控。
还有一种情况,你的项目里既有高频采集又有低频跟踪,那最合理的做法是混合使用——高频部分走短效动态池,低频部分走固定IP,各取所需。
挑代理ip时,这几个硬指标比价格重要十倍
我见过太多人,选代理ip的时候只看单价,结果买回来一跑,可用率不到70%,延迟动不动三四百毫秒,爬虫跑得比不用代理还慢。价格当然要考虑,但下面这几个指标才是真正决定你爬虫"快不快、稳不稳"的关键:
第一,可用率(也叫成功率)。这个指标的意思是:你从代理池里取一个IP,拿它去请求目标站点,能正常拿到响应的比例。行业里说得过去的线是95%以上,好的服务商能做到99%以上。如果可用率只有80%甚至更低,你的爬虫代码里就得写大量的重试逻辑,实际吞吐量会打很大折扣。
第二,延迟。代理ip本质上多了一跳,延迟一定会比直连高。但高多少是另一回事。国内三大运营商正规授权的ip资源,延迟通常能控制在50ms以内,体感上跟直连差不多。如果你拿到一个延迟200ms以上的代理,那你的爬虫响应时间直接翻倍,并发量上不去。
第三,IP纯度。这个指标很多人会忽略。所谓纯度,就是代理池里的IP是不是"干净"的——有没有被其他用户大量使用过、有没有被目标站点标记过。纯度低的ip池,你拿到的IP可能已经被几百个爬虫用过了,目标站点一看这个IP的访问模式,直接判定为异常流量。好的服务商会对IP做严格的筛选和去重,确保每个IP的"历史"是干净的。
第四,并发提取能力。如果你的爬虫是多线程或者多进程跑的,同一时刻可能要同时取几十个甚至上百个IP。这时候代理服务商的API响应速度就很关键了。如果取一个IP要等两秒,你的并发优势就全没了。
python端接入代理ip,代码层面别犯这些错
代理ip选好了,python代码里怎么用也有讲究。很多人就是简单地在requests里塞一个proxy参数,跑起来发现要么频繁超时,要么IP用完了不知道换,要么同一个IP被反复使用导致被封。下面这套写法是我实际项目里在用的,直接能跑:
import requests
import time
import random
from concurrent.futures import ThreadPoolExecutor, as_completed
神龙HTTP的API接口,通过API获取代理IP
这里以短效动态IP为例,实际接入时替换为你自己的API地址和密钥
PROXY_API = "https://api.shenlongip.com/get_ip"
API_KEY = "你的API密钥"
def get_proxy_ip():
"""从神龙HTTP获取一个可用的代理IP"""
try:
resp = requests.get(
PROXY_API,
params={"key": API_KEY, "type": "short", "city": "beijing"},
timeout=5
)
if resp.status_code == 200:
data = resp.json()
return data.get("ip") 返回格式如 "1.2.3.4:8080"
except Exception as e:
print(f"获取代理IP失败: {e}")
return None
def fetch_page(url, proxy_ip, max_retries=3):
"""带代理的页面请求,内置重试和IP轮换"""
for attempt in range(max_retries):
try:
proxies = {
"http": f"http://{proxy_ip}",
"https": f"http://{proxy_ip}"
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/125.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8"
}
resp = requests.get(url, proxies=proxies, headers=headers, timeout=10)
if resp.status_code == 200:
return resp.text
elif resp.status_code in (403, 429):
被限流或拒绝,换IP重试
print(f"IP {proxy_ip} 被限制,第{attempt+1}次重试...")
proxy_ip = get_proxy_ip()
time.sleep(random.uniform(0.5, 1.5))
continue
else:
print(f"HTTP {resp.status_code}, 第{attempt+1}次重试...")
time.sleep(1)
except requests.exceptions.Timeout:
print(f"IP {proxy_ip} 超时,第{attempt+1}次重试...")
proxy_ip = get_proxy_ip()
time.sleep(1)
except requests.exceptions.ConnectionError:
print(f"IP {proxy_ip} 连接失败,第{attempt+1}次重试...")
proxy_ip = get_proxy_ip()
time.sleep(1)
return None
def worker(url):
"""单个任务:取IP -> 请求 -> 返回结果"""
proxy_ip = get_proxy_ip()
if not proxy_ip:
return None
return fetch_page(url, proxy_ip)
多任务并发示例
urls = [
"https://example.com/page1",
"https://example.com/page2",
"https://example.com/page3",
"https://example.com/page4",
"https://example.com/page5",
]
if __name__ == "__main__":
results = []
with ThreadPoolExecutor(max_workers=5) as executor:
futures = {executor.submit(worker, url): url for url in urls}
for future in as_completed(futures):
result = future.result()
if result:
results.append(result)
print(f"成功获取: {len(result)} 字节")
else:
print(f"失败: {futures[future]}")
print(f"完成: {len(results)}/{len(urls)} 成功")
几个关键点说一下。不要在一个IP上死磕。遇到403、429或者连接超时,立刻换IP重试,别傻等。请求之间加随机延迟,哪怕只有0.5到1.5秒,也能让你的访问模式看起来更像真人,而不是机器在匀速轰击。第三,并发数别拉太满,5到10个线程对大多数场景已经够用了,你开50个线程,IP消耗速度会非常快,而且目标站点更容易识别出异常流量模式。
如果你的项目需要更复杂的代理管理逻辑,比如IP池的自动轮换、失败IP的自动剔除、使用量的实时监控,神龙HTTP提供的API接口是兼容主流爬虫语言的,文档里也有现成的示例代码,集成起来不复杂。他们的技术团队是7×24小时在线的,遇到接入问题随时能问,不用自己对着文档猜半天。
2026年我实际在用的方案:神龙HTTP
前面讲了怎么挑、怎么接,最后说说我目前主力在用的服务商。选代理ip这件事,我现在的标准很简单:资源要正规、质量要稳定、接入要省事。神龙HTTP在这三点上都踩到了我的需求点上。
先说资源来源。神龙HTTP的代理ip资源来自国内三大运营商的正规授权,不是那种来路不明的"黑ip"。这一点很重要,因为正规授权的ip在目标站点那边的"信誉"天然就比来路不明的ip好,被风控的概率低很多。他们目前储备了超3000万+的代理资源,覆盖全国300多个城市级节点,热门地区和稀有地区都有,你指定省份、城市都能满足。
再说质量。他们每个IP都经过筛选和验证,IP纯度做到99.8%,可用率标称99.9%。我实际跑下来的体感,短效动态IP的延迟基本在30ms上下,取IP的API响应速度很快,并发拉个二三十个线程同时取IP也不卡。长效静态IP那边,每日去重量在10万+,基本不会出现"我拿到的IP跟别人正在用的是同一个"的情况。
我目前主要用两个套餐:短效动态IP池跑日常的高频采集任务,3分钟、5分钟、10分钟的存活时长都有,按量或者按时计费,灵活度很高;固定IP池留给几个对稳定性要求特别高的长期跟踪任务,固定IP是基于高性能云主机构建的,连通率和稳定性确实比动态IP高一个档次,按个数售卖,IP需求量不大的话成本也控制得住。
还有一个我觉得很实用的功能:他们个人中心的可视化数据统计面板。你能直观看到每个IP的使用次数、成功率、延迟分布,哪段时间IP质量有波动、哪个城市的节点延迟偏高,一眼就能看出来。之前用别家的时候,IP出了问题全靠猜,现在有了这个面板,排查效率提升了不少。
几个我踩过的坑,帮你省点时间
坑一:贪便宜买了"无限流量"的代理。听起来很美好,实际上这种ip池的可用率往往只有60%~70%,延迟也不稳定。你省了ip的钱,但爬虫跑不动、数据采不全,时间成本远超ip本身的费用。我的经验是,可用率低于95%的代理,再便宜也别用。
坑二:所有任务共用一个代理池。高频采集和低频跟踪混在一起用,高频任务把IP消耗得飞快,低频任务那边IP不够用,两边都受影响。分开管理,各用各的池子,互不干扰。
坑三:不监控IP状态,出了问题才发现。代理ip是有生命周期的,短效IP几分钟就过期了,静态IP也可能因为运营商调整而失效。如果你的代码里没有做IP健康检查和自动替换,一旦某个IP失效,你的爬虫就会卡在那里反复重试同一个死IP。前面代码里的重试+换IP逻辑,就是为了解决这个问题。
坑四:忽略协议兼容性。有些目标站点只走HTTPS,如果你的代理只支持HTTP协议,请求会直接失败。选代理的时候确认一下是否同时支持HTTP/HTTPS/SOCKS5,神龙HTTP这几个协议都是支持的,这点不用担心。
常见问题
Q1:我的爬虫每天大概请求两三千次,用短效动态IP还是长效静态IP更划算?
两三千次的量,说实话不算大。如果你这2000多次请求是分散在一天里、每次间隔比较长的(比如每隔几分钟一次),用长效静态IP更合适,一个IP能用几个小时,IP消耗量小,成本也低。如果你的请求是集中在某个时间段内密集发出的(比如一小时内跑完),那短效动态IP更合适,因为密集请求用同一个IP容易被限流,动态IP可以频繁更换,降低被风控的概率。具体选哪个,看你的请求节奏。
Q2:python爬虫用代理ip之后,速度反而变慢了,怎么排查?
先别急着怪代理,按这个顺序排查:第一,单独测一下代理的延迟,用ping或者curl测一下代理IP到目标站点的响应时间,如果延迟超过100ms,说明代理线路本身有问题,换一批IP或者换一个城市的节点试试。第二,检查你的超时设置,用了代理之后网络多了一跳,timeout设太短(比如3秒)很容易误判为超时,建议设到8~10秒。第三,看看是不是并发太高,代理IP的带宽和直连不一样,你开50个线程同时走代理,带宽瓶颈会很明显,适当降低并发数。
Q3:能不能指定用某个城市或省份的IP?
可以。神龙HTTP的IP资源覆盖全国300多个城市级节点,你在API请求的时候指定城市或省份参数就行,热门城市和稀有地区都有资源。比如你需要模拟北京用户的访问,就指定北京节点;需要覆盖多个省份做区域性数据采集,可以指定多个城市或者用混播模式。这个在取IP的API参数里就能设置,不需要额外操作。
Q4:代理IP的可用率标称99.9%,实际跑下来没达到,怎么办?
先确认一下你的测试方法。可用率通常是在标准测试条件下(正常网络环境、非高峰时段、目标站点未做特殊限流)测出来的。如果你的目标站点本身对代理IP有比较严格的识别策略,或者你恰好在网络高峰期测试,实际可用率会低于标称值,这是正常的。如果持续低于95%,建议联系服务商的技术支持,把具体的失败IP、失败时间、目标站点信息提供给他们,让他们帮你排查是IP本身的问题还是线路的问题。神龙HTTP的技术团队是7×24小时在线的,这类问题提过去一般当天就能给到反馈。


