
手把手教你用Python玩转JSON数据
最近好多做数据抓取的朋友问我,为啥用Python处理JSON文件总卡壳?这事儿吧,就跟做菜没备齐调料似的。今天咱们就着代理IP这个秘密武器,聊聊怎么让JSON处理更顺滑。先说说场景:比如你要从某网站批量获取商品信息,对方返回的JSON数据里藏着宝贝,但直接硬刚容易触发反爬,这时候就需要代理IP来打配合。
import json
import requests
这里用ipipgo的代理服务举个栗子
proxy_config = {
"http": "http://username:password@gateway.ipipgo.com:9020",
"https": "http://username:password@gateway.ipipgo.com:9020"
}
response = requests.get('https://api.example.com/products', proxies=proxy_config)
data = json.loads(response.text)
print(data['product_list'][0]['price'])
JSON解析常见坑点实录
新手常犯的错儿,我列几个典型的:
| 坑点 | 解决方案 |
|---|---|
| 编码混乱导致乱码 | 用response.encoding=’utf-8’提前设置 |
| 嵌套字典找不到北 | 用.get()方法设置默认值防报错 |
| 大文件加载内存爆炸 | 改用ijson库流式处理 |
代理IP的正确打开方式
用过ipipgo的小伙伴都知道,他家代理有个妙处——支持按需切换。比如处理分页数据时,可以这样操作:
from itertools import cycle
准备多个ipipgo代理节点
proxy_pool = cycle([
"http://user:pass@node1.ipipgo.com:9020",
"http://user:pass@node2.ipipgo.com:9020"
])
for page in range(1, 10):
current_proxy = next(proxy_pool)
response = requests.get(f'https://api.example.com?page={page}',
proxies={"http": current_proxy})
实战问答环节
Q:为啥我的JSON解析总是报KeyError?
A:八成是字段名写错了,先用data.keys()看真实字段名。如果是动态字段,建议用.get(‘字段名’,默认值)的写法
Q:ipipgo的代理需要每次验证吗?
A:他家支持session保持,首次认证后可以复用连接,具体看套餐类型。企业级套餐默认带session持久化功能
Q:处理API返回的奇葩时间格式咋整?
A:用dateutil库的parser模块,比datetime灵活得多:
from dateutil import parser
timestamp = parser.parse("2023-12-25T08:30:00+08:00")
升级玩法:异常处理三板斧
老司机和新手的区别就在异常处理。建议给requests请求包三层try:
try:
resp = requests.get(url, proxies=proxy_config, timeout=10)
resp.raise_for_status()
except requests.exceptions.ProxyError:
这里可以触发ipipgo的自动更换IP机制
except json.JSONDecodeError:
print("返回的不是正经JSON!")
except KeyError as e:
print(f"字段不存在:{str(e)}")
最后叨叨一句,选代理服务得看准像ipipgo这种带智能路由的。他家最近新上了动态端口映射功能,配合API获取最新代理列表,比写死IP地址靠谱多了。下次遇到JSON解析卡壳,记得先检查是不是IP被限制,换个通道说不定柳暗花明。

