国外IP代理推荐:
IPIPGO|全球住宅代理IP(>>>点击注册免费测试<<<)
国内IP代理推荐:
天启|全国240+城市代理IP(>>>点击注册免费测试<<<)
当爬虫遇到代理IP数据,JSON该怎么剥洋葱?
搞爬虫的老铁们肯定常遇到这种情况:从ipipgo这类代理服务商拿到的IP数据,经常是套娃式的JSON结构。比如你要提取某个城市的住宅IP,结果数据像俄罗斯套娃一样层层嵌套。这时候就需要掌握Python处理多层JSON的剥洋葱技巧。

{
"proxy_list": [
{
"ip": "203.12.34.56",
"geo": {"country": "JP", "city": "Tokyo"},
"protocols": ["HTTP", "socks5"]
},
//...更多IP数据
]
}
三把钥匙开JSON保险箱
处理这种嵌套数据,记住三个核心方法:
- 字典直接取值:
data['proxy_list'][0]['ip'] - get()安全模式:
data.get('proxy_list', [])[0].get('protocols') - 列表推导式批量收割:
[ip['geo']['city'] for ip in data['proxy_list'] if ip['geo']['country'] == 'JP']
特别注意:ipipgo的住宅IP数据里,protocols字段可能出现空列表。这时候用get()方法比直接取键更安全,避免程序当场崩溃。
实战:批量提取可用代理ip
假设我们要提取日本地区支持HTTP协议的动态IP:
import json
从ipipgo获取的原始数据
raw_data = '''{"proxy_list": [...]}'''
data = json.loads(raw_data)
filtered_ips = [
{
"ip": item["ip"],
"port": item["port"],
"expiry": item["validity"]["end_time"]
}
for item in data["proxy_list"]
if "http" in item.get("protocols", [])
and item["geo"].get("country") == "JP"
and item["type"] == "dynamic"
]
这里用到了多重条件过滤,特别注意geo字段可能存在的嵌套缺失情况。ipipgo的住宅IP数据标注非常规范,像validity有效期字段都是标准化的时间戳,方便直接处理。
避坑指南:那些年我踩过的JSON坑
| 坑位描述 | 正确姿势 |
|---|---|
| KeyError突然袭击 | 用dict.get('key', default_value)代替直接取键 |
| 列表越界报错 | 先判断len()再索引取值 |
| 数据类型突变 | 用type()或isinstance做类型校验 |
QA时间:高频问题速查
Q:为什么我取geo字段老报错?
A:有些IP可能没有地理位置信息,建议先用if 'geo' in ip_data做判断。ipipgo的住宅IP数据完整度高达99.8%,但防御性编程还是要做。
Q:怎么快速提取特定协议的IP?
A:用集合判断更高效:if set(['http','Socks5']).issubset(ip['protocols'])
Q:处理大量IP数据时程序卡死怎么办?
A:建议分页处理+异常捕获。ipipgo的API支持按需分页获取,可以有效控制单次处理数据量。
最后安利下,处理代理IP数据时有个靠谱的数据源能省心80%的麻烦。像ipipgo这种专业服务商,数据格式规范且字段完整,全球240+国家地区的住宅IP都有标准化的元数据标注,解析起来那叫一个丝滑~
国外IP代理推荐:
IPIPGO|全球住宅代理IP(>>>点击注册免费测试<<<)
国内ip代理推荐:
天启|全国240+城市代理IP(>>>点击注册免费测试<<<)
















发表评论
发表评论: