IPIPGO ip代理 Python读取JSON: 文件解析技巧

Python读取JSON: 文件解析技巧

Python处理JSON文件的基础操作 咱们做网络请求的时候,经常要和JSON数据打交道。比如用requests库获取代理IP服务商的接口数据,返回的基本都是JSON格式。举个栗子,ipipgo的API响应就是这样的结构: import …

Python读取JSON: 文件解析技巧

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返回数据直接存数据库,比操作文件更可靠。特别是需要同时管理多个项目时,数据库的优势就显出来了。

本文由ipipgo原创或者整理发布,转载请注明出处。https://www.ipipgo.com/ipdaili/34008.html
新春惊喜狂欢,代理ip秒杀价!

专业国外代理ip服务商—IPIPGO

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

13260757327

在线咨询: QQ交谈

邮箱: hai.liu@xiaoxitech.com

工作时间:周一至周五,9:30-18:30,节假日休息
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部
zh_CN简体中文