
Python处理JSON文件的基础操作
咱们做网络请求的时候,经常要和JSON数据打交道。比如用requests库获取代理IP服务商的接口数据,返回的基本都是JSON格式。举个栗子,ipipgo的API响应就是这样的结构:
import json
假装这是从ipipgo获取的响应数据
proxy_data = '''
{
"status": "success",
"data": [
{"ip": "112.95.208.11", "port": 8000},
{"ip": "183.32.125.90", "port": 8080}
]
}
'''
字符串转字典
parsed_data = json.loads(proxy_data)
print(parsed_data['data'][0]['ip']) 输出112.95.208.11
这里有个容易栽坑的地方:json库默认把数字转成int类型。比如端口号8000会被处理成整数,但有些场景可能需要字符串格式。这时候可以加个类型转换:str(parsed_data[‘data’][0][‘port’])
代理IP场景下的实战技巧
当需要批量管理代理IP时,建议把IP列表存到本地文件。比如把ipipgo提取的代理保存成proxies.json:
import json
proxy_list = [
{"http": "http://112.95.208.11:8000"},
{"http": "http://183.32.125.90:8080"}
]
写入文件时加indent参数更易读
with open('proxies.json', 'w') as f:
json.dump(proxy_list, f, indent=2)
读取时要注意编码问题,特别是Windows系统:
with open('proxies.json', 'r', encoding='utf-8') as f:
proxies = json.load(f)
动态切换代理的进阶玩法
结合ipipgo的自动更换IP功能,可以搞个智能切换系统。这里演示个轮询方案:
import random
import requests
with open('proxies.json') as f:
ip_pool = json.load(f)
def get_random_proxy():
return random.choice(ip_pool)
请求时带上代理
response = requests.get(
'https://目标网站',
proxies=get_random_proxy(),
timeout=5
)
重点注意:记得在代码里加异常处理,遇到失效IP及时从列表里剔除。ipipgo的存活率能达到99%,比自建代理池省心得多。
常见问题QA
Q:json.decoder.JSONDecodeError报错咋整?
A:八成是数据里有特殊符号没转义,或者接口返回的不是标准JSON。可以先用print()输出原始数据检查,或者在loads()里加strict=False参数
Q:代理IP突然失效怎么办?
A:推荐用ipipgo的动态隧道代理,每个请求自动换IP。要是用传统静态代理,记得设置重试机制:
from retrying import retry
@retry(stop_max_attempt_number=3)
def safe_request(url):
return requests.get(url, proxies=get_random_proxy())
Q:怎么验证代理是否生效?
A:用这个检查接口,能看到当前使用的出口IP:
requests.get('http://ipipgo.com/checkip', proxies=proxy).text
效率优化小贴士
处理大文件时别用json.load()全加载,试试逐行读取:
import ijson
with open('big_data.json') as f:
只解析data字段里的代理信息
proxies = ijson.items(f, 'data.item')
for proxy in proxies:
print(proxy['ip'])
要是经常要读写配置,建议把ipipgo的API返回数据直接存数据库,比操作文件更可靠。特别是需要同时管理多个项目时,数据库的优势就显出来了。

