
Python玩转代理IP数据,json库才是隐藏高手
搞数据采集的老铁们都知道,代理IP和JSON这对组合简直是黄金搭档。咱们今天不整虚的,直接上硬核操作。先说说为啥要用json库处理代理IP数据?举个栗子,ipipgo平台返回的代理列表都是标准的JSON格式,不用这玩意解析你打算手撕数据吗?
import json
假设这是ipipgo返回的代理数据
proxy_data = '''
{
"code": 200,
"data": [
{"ip": "123.123.123.1", "port": 8000},
{"ip": "123.123.123.2", "port": 8001}
]
}
'''
解析成字典
parsed_data = json.loads(proxy_data)
print(parsed_data['data'][0]['ip']) 输出123.123.123.1
注意看json.loads()这个关键操作,它能把字符串变成字典对象。很多新手栽在数据类型转换上,记住原始数据是字符串的时候必须用loads,如果是文件就用load。
代理IP实战技巧:异常处理别马虎
实测发现,处理代理IP数据最容易出幺蛾子的地方就是网络波动。比如从ipipgo获取数据时突然断网,不加异常处理分分钟程序崩溃。看这个改良版代码:
import json
import requests
def get_ipipgo_proxies():
try:
resp = requests.get('https://api.ipipgo.com/proxy-list')
return json.loads(resp.text)['data']
except json.JSONDecodeError:
print("解析JSON数据失败,检查接口返回格式")
except requests.exceptions.RequestException:
print("网络连接异常,建议检查代理配置")
return []
这里重点加了双重异常捕获,网络问题和数据格式问题分开处理。特别是用ipipgo的服务时,他们的API响应格式比较稳定,如果出现解析失败多半是本地网络的问题。
代理IP轮换必备:数据持久化存储
采集数据时经常需要保存代理IP池,这时候json.dump()就派上用场了。配合ipipgo的定时更新API,可以实现自动化代理维护:
import json
from datetime import datetime
def save_proxy_pool(proxies):
timestamp = datetime.now().strftime("%Y%m%d%H%M")
with open(f'ipipgo_proxies_{timestamp}.json', 'w') as f:
json.dump({"update_time": timestamp, "proxies": proxies}, f, indent=2)
这样保存的文件带时间戳,方便后续排查问题。ipipgo的代理有效期一般在6-24小时,建议每小时执行一次更新。
常见问题QA
Q:为什么用ipipgo的代理总是连接失败?
A:先检查代理格式是否正确,建议使用他们的API直接获取最新代理。如果还不行,可能是本地网络限制了代理端口。
Q:如何提高代理IP采集效率?
A:试试用多线程+ipipgo的大并发套餐,他们的独享代理池支持同时500+连接,记得设置合理的超时时间(建议3-5秒)。
| 错误类型 | 解决方案 |
|---|---|
| JSONDecodeError | 检查接口返回内容是否被篡改 |
| ConnectionError | 更换ipipgo的接入区域节点 |
最后说个冷知识:用json.dumps()的ensure_ascii参数处理中文代理信息时,记得设成False,不然你会看到一堆unicode码。这个坑我当年踩过,现在告诉你们算是省了三天调试时间。

