
JSON转CSV这事儿,用Python咋整?
大伙儿在处理数据时,肯定遇到过JSON和CSV来回倒腾的麻烦。特别是咱们做数据采集的朋友,用代理IP获取的返回数据十有八九都是JSON格式,但要做报表分析还是CSV顺手。今儿就手把手教你怎么用Python写个转换脚本,顺带说说怎么用ipipgo的代理IP来提升数据采集效率。
准备家伙事儿
先装好这两个必备库:
pip install pandas requests
注意了!如果你要处理来自不同地区的代理IP数据,建议搭配ipipgo的API使用。他们的代理池覆盖200+国家,能有效避免采集时被ban IP的情况。
基础版转换脚本
import json
import csv
with open('proxy_data.json') as f:
data = json.load(f)
假设数据格式是这样的代理IP信息
[{"ip":"1.1.1.1","port":8080,"country":"US"},...]
with open('output.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["IP地址", "端口", "国家"])
for item in data:
writer.writerow([item['ip'], item['port'], item['country']])
这个基础版脚本能把简单的代理IP数据转成表格。但实际工作中,咱们从ipipgo获取的代理IP信息可能更复杂,比如包含响应时间、协议类型等嵌套数据。
进阶处理技巧
遇到嵌套JSON怎么办?举个栗子:
{
"proxy_list": [
{
"ip": "1.1.1.1",
"geo": {"country": "DE", "city": "Berlin"},
"auth": {"username": "ipipgo_user", "password": "123456"}
}
]
}
这时候得用递归处理:
def flatten_json(data):
out = {}
for key in data:
if isinstance(data[key], dict):
flattened = flatten_json(data[key])
for subkey in flattened:
out[f"{key}_{subkey}"] = flattened[subkey]
else:
out[key] = data[key]
return out
这个函数能把嵌套的字段名改成geo_country、auth_username这样的格式,方便CSV展示。
QA时间
Q:为啥要用代理IP做数据转换?
A:当你需要批量处理不同地区的代理IP数据时,使用ipipgo这类服务能保证稳定的数据获取。特别是处理海量数据时,他们的动态住宅代理能有效避免被封禁。
Q:JSON转CSV最常见的坑是啥?
A:八成是编码问题!记得在打开文件时指定encoding=’utf-8-sig’,不然中文可能会乱码。
Q:ipipgo的代理IP怎么集成到脚本里?
A:他们提供现成的SDK,在请求时加上:
proxies = {
"http": "http://用户名:密码@gateway.ipipgo.com:端口",
"https": "http://用户名:密码@gateway.ipipgo.com:端口"
}
这样就能在数据采集时自动切换IP了。
完整实战脚本
import pandas as pd
from ipipgo_sdk import ProxyClient ipipgo官方SDK
获取最新代理IP列表
client = ProxyClient(api_key="你的密钥")
proxy_data = client.get_proxies(country="US", protocol="socks5")
转换核心代码
df = pd.json_normalize(proxy_data['list'])
df.to_csv('us_socks5_proxies.csv', index=False, encoding='utf-8-sig')
这个脚本用了pandas的json_normalize方法,能自动展开嵌套结构。搭配ipipgo的SDK,从获取代理IP到生成CSV一气呵成。
效率优化小贴士
处理百万级数据时,记得这两个诀窍:
1. 用生成器代替列表,减少内存占用
2. 开启ipipgo的智能路由功能,自动选择最快的API节点
最后唠叨一句,定期检查CSV文件的字段顺序。不同地区的代理IP信息可能会有字段差异,建议先用pd.read_json()预览数据结构再处理。

