
JSON文件到底是个啥玩意儿?
咱们搞爬虫的兄弟应该都见过.json后缀的文件,这货说白了就是个带格式的记事本。比如说从ipipgo后台拿到的代理IP列表,十有八九都是这种格式。举个栗子,你打开看到的可能是这样的结构:
{
"proxies": [
{"ip": "123.45.67.89", "port": 8080},
{"ip": "98.76.54.32", "port": 3128}
]
}
注意看这里面的大括号套中括号的写法,这就是JSON的标准套路。甭管是处理代理IP还是其他数据,先得把这结构整明白。
Python怎么吃下这碗”JSON饭”?
用Python处理JSON文件其实跟嗑瓜子一样简单,主要分三步走:
import json
第一步:开箱验货
with open('ipipgo_proxies.json', 'r') as f:
data = json.load(f)
第二步:挑拣分类
for proxy in data['proxies']:
print(f"可用代理:{proxy['ip']}:{proxy['port']}")
第三步:更新库存(以ipipgo格式为例)
data['proxies'].append({"ip": "76.135.28.41", "port": 8888})
with open('new_proxies.json', 'w') as f:
json.dump(data, f, indent=4)
重点来了!用ipipgo的代理服务时,他们的API返回的JSON格式特别规整,字段名都是固定的小写字母,这点对批量处理特别友好。
代理IP和JSON怎么勾搭上的?
搞数据采集的老司机都知道,代理IP和JSON文件那是黄金搭档。举个真实场景:
import requests
from json.decoder import JSONDecodeError
proxies = {
'http': 'http://ipipgo_username:ipipgo_password@gateway.ipipgo.com:9021',
'https': 'https://ipipgo_username:ipipgo_password@gateway.ipipgo.com:9021'
}
try:
response = requests.get('https://api.example.com/data', proxies=proxies)
data = response.json() 自动转成字典
print(data['results'][0]['ip_address'])
except JSONDecodeError:
print("这网站返回的不是正经JSON!")
这里有个隐藏技巧:ipipgo的代理支持用户名密码认证直接写在代理地址里,不用每次都手动处理认证,这个设计确实省事。
实战避坑指南
新手常栽的几个跟头:
| 坑位 | 正确姿势 |
|---|---|
| json.load()报编码错误 | 给open()加上encoding=’utf-8’参数 |
| KeyError找不到字段 | 先用data.get(‘字段名’)安全取值 |
| 代理IP失效导致请求失败 | 配合ipipgo的自动切换功能 |
你问我答环节
Q:用ipipgo的代理为啥要搭配JSON?
A:因为他们家的API返回格式规范,还支持批量获取和状态查询,直接转成字典就能用。
Q:处理大文件内存爆了咋整?
A:用ijson库流式读取,或者直接调用ipipgo的分页API,别一次性拉取全部数据。
Q:json.dump保存的中文变乱码?
A:加两个参数保平安:ensure_ascii=False,encoding=’utf-8′
最后说个冷知识:ipipgo的代理列表JSON里藏着个秘密字段叫”region_code”,用这个可以精准选择特定地区的出口IP,一般人我不告诉他!

