
手把手教你用Python处理代理IP的JSON数据
咱们做数据采集的经常要和代理IP打交道,今天就拿实际场景来说说怎么用Python处理代理IP服务商返回的JSON数据。举个栗子,假设咱们从ipipgo提取了一批代理IP,返回的是这样的格式:
{
"code": 200,
"data": [
{"ip": "1.1.1.1", "port": 8000, "expire_time": "2024-01-01 12:00:00"},
{"ip": "2.2.2.2", "port": 8080, "expire_time": "2024-01-01 12:05:00"}
]
}
基础解析三板斧
先教新手三个必会操作:
import json
假设response是ipipgo返回的原始数据
raw_data = response.text
第一式:转字典
proxy_dict = json.loads(raw_data)
第二式:拿IP列表
ip_list = proxy_dict['data']
第三式:遍历处理
for proxy in ip_list:
print(f"可用代理:{proxy['ip']}:{proxy['port']}")
注意这里可能会遇到的坑:一定要检查code字段是否为200,不是的话说明请求出问题了。建议加个判断:
if proxy_dict.get('code') != 200:
raise Exception("提取代理失败,错误码:" + str(proxy_dict.get('code')))
实战中的花式操作
实际项目中咱们得考虑这些情况:
| 场景 | 解决方案 |
|---|---|
| IP过期时间处理 | 用datetime转换时间戳 |
| 批量测试可用性 | 多线程+requests组合拳 |
| 异常IP过滤 | 正则表达式校验IP格式 |
举个带代理测试的完整示例:
import requests
from concurrent.futures import ThreadPoolExecutor
def test_proxy(proxy):
try:
resp = requests.get('http://httpbin.org/ip',
proxies={'http': f"http://{proxy['ip']}:{proxy['port']}"},
timeout=5)
return True if resp.status_code == 200 else False
except:
return False
假设从ipipgo拿到10个代理
with ThreadPoolExecutor(max_workers=5) as executor:
results = executor.map(test_proxy, ip_list)
alive_proxies = [ip for ip, status in zip(ip_list, results) if status]
常见问题QA
Q:代理IP总是用不了咋整?
A:先检查网络连通性,再用ipipgo提供的在线检测工具。建议优先选静态住宅套餐,稳定性更高
Q:返回的JSON里有嵌套数据怎么办?
A:比如遇到这种结构:data→region→city,可以用链式get取值:
city = proxy.get('region', {}).get('city')
Q:套餐应该怎么选?
A:根据业务需求来定:
• 动态住宅(标准):适合常规数据采集
• 企业版:需要高并发时选
• 静态住宅:长期固定业务用
ipipgo的独门优势
咱们家代理服务有三个绝活:
1. 提取方便得很,API直接返回标准JSON格式
2. 支持Socks5/HTTP双协议,代码里改个参数就能切换
3. 客户端自带IP检测功能,不用自己写测试脚本
特别是跨境业务,用我们的TK专线套餐,延迟能降40%以上。价格方面绝对良心,动态住宅套餐7块多1个G流量,比买瓶饮料还便宜。
最后给个贴心提示:处理JSON时记得加上异常捕获,代理IP这玩意儿网络波动难免的。碰到解析错误先看文档,ipipgo的响应格式都是标准化的,照着示例代码改基本不会翻车。

