
Python处理代理IP的JSON响应,手把手教你避坑
搞爬虫的朋友肯定遇到过这种情况——明明拿到了代理IP的API返回数据,但就是解析不出来可用IP。别慌,咱们一步步来,教你用Python玩转代理IP的JSON响应。
基础版:直接解析响应内容
以ipipgo的API响应为例,先看个典型的结构(模拟数据):
{
"code": 200,
"data": [
{"ip":"1.1.1.1","port":8080,"expire_time":"2024-01-01 12:00:00"},
{"ip":"2.2.2.2","port":8888,"expire_time":"2024-01-01 12:05:00"}
]
}
用Python处理时,千万别直接loads完就完事,记得加个状态码验证:
import requests
import json
resp = requests.get('https://api.ipipgo.com/getip')
if resp.status_code == 200:
data = json.loads(resp.text)
if data['code'] == 200:
for proxy in data['data']:
print(f"{proxy['ip']}:{proxy['port']}")
实战技巧:代理IP的异常处理
遇到过这些情况吗?明明返回了数据,但实际使用时IP失效。建议在解析时增加有效期校验:
from datetime import datetime
for proxy in data['data']:
expire = datetime.strptime(proxy['expire_time'], "%Y-%m-%d %H:%M:%S")
if datetime.now() < expire:
usable_proxies.append(proxy)
ipipgo的代理有效期标注精确到秒,这点对需要长期运行的程序特别重要。他们家的动态住宅(企业版)套餐有效期更长,适合需要稳定IP的业务场景。
进阶操作:自动切换代理池
结合ipipgo的API特性,可以做个智能代理池。注意这两个关键点:
- 设置提前30秒刷新即将过期的IP
- 不同协议(HTTP/HTTPS)分开存储
def update_proxy_pool():
new_proxies = requests.get('https://api.ipipgo.com/reload').json()
for p in new_proxies['data']:
if p['type'] == 'https':
https_pool.append(f"{p['ip']}:{p['port']}")
else:
http_pool.append(f"{p['ip']}:{p['port']}")
为什么推荐ipipgo?
用过七八家代理服务,最后锁定ipipgo的三大硬核优势:
| 功能 | 别家常见问题 | ipipgo解决方案 |
|---|---|---|
| 协议支持 | 只给HTTP协议 | Socks5/HTTPS全支持 |
| 响应格式 | JSON字段不统一 | 固定结构+明确字段名 |
| 套餐选择 | 强制买大流量包 | 35元/IP的静态套餐起购 |
高频问题QA
Q:解析时总报JSONDecodeError?
A:九成是代理服务器返回了非JSON数据,建议先用resp.status_code判断状态,再加try-except包裹解析逻辑
Q:拿到IP但连接超时?
A:可能是IP被封了,换成ipipgo的TK专线试试,这种线路的通过率更高
Q:需要同时处理多个API返回?
A:用ipipgo的批量提取接口,一次性拿多个地区的IP,记得在解析时加geo字段过滤
最后说个隐藏技巧:ipipgo的API支持返回不同数据格式,如果在Python里处理JSON费劲,可以换成txt格式直接按行读取,具体在API参数里加个format=txt就行。不过要注意,这样会丢失端口和过期时间等详细信息,适合快速测试的场景。

