
Operaciones básicas de Python para procesar archivos JSON
Cuando hacemos peticiones de red, a menudo tenemos que tratar con datos JSON. Por ejemplo, utilizando la biblioteca de peticiones para obtener los datos de la interfaz del proveedor de servicios proxy IP, el retorno es básicamente en formato JSON. Por ejemplo, la respuesta API de ipipgo está estructurada así:
importar json
Imagina que estos son los datos de respuesta obtenidos de ipipgo
proxy_data = '''
{
"status": "success
"datos": [
{"ip": "112.95.208.11", "puerto": 8000}, {"ip": "183.125.90", "puerto": 8000}, [
{"ip": "183.32.125.90", "puerto": 8080}
]
}
'''
Cadena a diccionario
datos_analizados = json.loads(datos_proxy)
print(parsed_data['data'][0]['ip']) output 112.95.208.11
Aquí hay un lugar fácil para plantar un hoyo:La biblioteca json convierte los números a int por defecto.. Por ejemplo, el número de puerto 8000 se procesará como un número entero, pero algunos escenarios pueden requerir el formato de cadena. Esta vez se puede añadir una conversión de tipo: str(parsed_data['data'][0]['port'])
Consejos prácticos para escenarios de IP proxy
Cuando necesite gestionar IPs proxy en masa, se recomienda guardar la lista de IPs en un fichero local. Por ejemplo, guarde los proxies extraídos por ipipgo como proxies.json:
importar json
lista_proxy = [
{"http": "http://112.95.208.11:8000"},
{"http": "http://183.32.125.90:8080"}
]
Escribe el archivo con un parámetro de sangría para hacerlo más legible
con open('proxies.json', 'w') como f.
json.dump(lista_proxy, f, sangría=2)
Tenga en cuenta los problemas de codificación al leer, especialmente en Windows:
con open('proxies.json', 'r', encoding='utf-8') como f.
proxies = json.load(f)
Juego avanzado con agentes de cambio dinámico
Combinado con la función de cambio automático de IP de ipipgo, puede obtener un sistema de conmutación inteligente. Demuestre un esquema de sondeo aquí:
importar aleatorio
importar solicitudes
con open('proxies.json') como f.
ip_pool = json.load(f)
def get_random_proxy(): return random.choice(ip_pool)
return random.choice(ip_pool)
Peticiones con proxy
response = requests.get(
'https://目标网站', proxies=get_random_proxy(), proxies=get_random_proxy()
proxies=get_random_proxy(),
timeout=5
)
Atención concentrada:Recuerde que debe agregar el manejo de excepciones en el código, el fracaso encuentro IP oportuna de la lista de eliminación. la tasa de supervivencia de ipipgo puede llegar a 99%, que la piscina de proxy de construcción propia para ahorrar más.
Preguntas frecuentes QA
Q:json.decoder.JSONDecodeError报错咋整?
R: 80% de los datos tiene símbolos especiales no se escapan, o la interfaz de retorno no es estándar JSON, puede utilizar print () para la salida de los datos originales para comprobar, o cargas () en el parámetro strict = False
P: ¿Qué debo hacer si mi IP proxy falla de repente?
R: Recomendamos utilizar el Proxy Túnel Dinámico de ipipgo, que cambia automáticamente la dirección IP para cada petición. si utiliza un proxy estático tradicional, recuerde configurar un mecanismo de reintento:
from retrying import retry
@retry(stop_max_attempt_number=3)
def solicitud_segura(url).
return requests.get(url, proxies=get_random_proxy())
P: ¿Cómo puedo comprobar si el agente está en vigor?
R: Utilizando esta interfaz de comprobación, puede ver la IP de salida utilizada actualmente:
requests.get('http://ipipgo.com/checkip', proxies=proxy).text
Consejos para optimizar la eficiencia
Cuando se trate de archivos grandes no utilice json.load() para cargarlos todos, intente leerlos línea por línea:
importar ijson
con open('big_data.json') como f.
Analizar sólo los proxies en el campo de datos
proxies = ijson.items(f, 'datos.item')
para proxy en proxies.
print(proxy['ip'])
Si a menudo necesita leer y escribir configuraciones, se recomienda almacenar los datos devueltos por la API de ipipgo directamente en la base de datos, que es más fiable que manipular archivos. Especialmente cuando necesite gestionar múltiples proyectos al mismo tiempo, las ventajas de la base de datos serán obvias.

