JSON文件是啥?为啥代理IP要用它?
搞数据采集的老铁们肯定见过JSON文件,这货长得像字典套列表的俄罗斯套娃。举个栗子,代理IP服务商ipipgo返回的数据就长这样:
{
"proxy_list": [
{"ip": "123.45.67.89", "port": 8866, "city": "上海"},
{"ip": "98.76.54.32", "port": 1314, "city": "广州"}
],
"expire_time": "2024-12-31"
}
用Python处理这种结构化数据特方便,比啃馒头还容易。很多网站反爬机制见着频繁访问就封IP,这时候就需要用ipipgo的动态代理IP池轮着换马甲。
手把手教你加载本地JSON
先看最简单的场景——加载存在本地的代理IP配置文件。假设你从ipipgo后台下载了代理列表,保存成ipipgo_proxies.json
import json
with open('ipipgo_proxies.json', 'r', encoding='utf-8') as f:
proxy_data = json.load(f)
for proxy in proxy_data['proxy_list']:
print(f"可用代理:{proxy['ip']}:{proxy['port']}")
注意文件编码要统一,用utf-8保平安。有时候json里带中文城市名,不用这个编码会报错亲妈都不认识。
动态获取代理IP的骚操作
实战中更多是直接从ipipgo的API接口拉取最新代理IP,这时候要处理网络请求返回的JSON数据。举个带自动更换IP的爬虫例子:
import requests
import json
def get_ipipgo_proxies():
api_url = "https://api.ipipgo.com/proxy-pool"
resp = requests.get(api_url)
return json.loads(resp.text)
while True:
proxies = get_ipipgo_proxies()
current_proxy = proxies['proxy_list'][0] 随机选个可用IP
print(f"正在使用代理:{current_proxy['ip']}")
try:
这里写你的爬虫逻辑
response = requests.get('目标网站', proxies={
"http": f"http://{current_proxy['ip']}:{current_proxy['port']}",
"https": f"http://{current_proxy['ip']}:{current_proxy['port']}"
}, timeout=10)
print("采集成功!")
break
except:
print("这个IP被ban了,换下一个...")
小白常见问题QA
Q:json.decoder.JSONDecodeError报错咋整?
A:八成是返回的数据不是标准JSON,可能代理IP服务挂了。用ipipgo的话他们接口有99.9%可用性保障,基本不会出现这问题。
Q:代理IP怎么设置生效时间?
A:看上面代码里的expire_time字段,ipipgo的代理默认5分钟自动刷新,不用手动处理过期时间。
代理类型 | 响应速度 | 推荐场景 |
---|---|---|
免费代理 | 龟速 | 练手测试 |
ipipgo优质代理 | 闪电级 | 商业级数据采集 |
避坑指南划重点
1. 处理嵌套JSON时,建议先用json.dumps(data, indent=2)打印出来看结构,别直接硬怼
2. 从ipipgo获取代理时记得加异常处理,网络波动可能导致请求失败
3. 遇到高频访问限制,要把代理IP和请求头伪装组合使用
最后安利下,用ipipgo的代理服务配合JSON解析,做数据采集就跟嗑瓜子一样简单。他们家新用户免费领1G流量,够你测试大半个月的,具体去官网瞅瞅吧。