
JSON como paquete de mensajería para abrir... diccionarios de Python para jugar bien
Involucrarse en los datos como recibir la entrega urgente, proxy IP proveedores de servicios a menudo devuelven datos JSON envuelto apretado. Hoy usamos un helicóptero para cortar sandía manera, de la mano para enseñarle cómo utilizar Python para desmontar este "paquete de datos", centrándose en cómo utilizar en la práctica con el servicio de proxy de ipipgo.
Guía para descifrar recibos de mensajería
Echemos un vistazo a un escenario típico: cuando se utiliza la API de ipipgo para obtener una IP proxy, el JSON devuelto tiene este aspecto:
{
"código":200
"datos":[
{"ip": "1.1.1.1", "port":8000, "expire": "2024-03-01"}, {"ip": "2.2.2.2", "port":9000, "expire": "2024-03-01"}, }
{"ip": "2.2.2.2", "port":9000, "expire": "2024-03-02"}
]
}
Es como las estanterías de una estación de reparto.Datos del número de estantería.Debajo se colocan varios paquetes (información IP). La posición correcta para abrir los paquetes con Python es:
importar peticiones
importar json
resp = requests.get('https://api.ipipgo.com/getips')
ip_data = json.loads(resp.text)
La cuestión Primero, asegúrate de que la entrega no es incorrecta
if ip_data['code'] == 200.
para paquete en ip_data['datos'].
print(f "IP disponible:{paquete['ip']}:{paquete['puerto']}")
Rescate Común en Escena de Vuelco
Los novatos suelen quedarse atascados en estos baches:
1. Es la llave equivocada.sugiero print(json.dumps(data,indent=2)) primero para imprimir toda la estructura
2. Aviso de paquete aéreo: Algunas APIs pueden devolver una lista vacía de datos, recuerde añadir una sentencia if: if ip_data.get('data')
Cómo romper múltiples capas de anidamiento
Encontré estos datos de tipo muñeca rusa anidada:
{
"nodo1":{
"nodo2":[
{"detalle":{"ip": "3.3.3.3.3"}}
]
}
}
Basado en IPpostura correctaSí:
ip = datos['nodo1']['nodo2'][0]['detalle']['ip']
Si tienes miedo de cometer un error al escribir, puedes desmontarlo capa por capa como si pelaras una cebolla:
capa1 = data.get('nodo1',[{}])
capa2 = capa1.get('nodo2',[{}])
first_item = capa2[0] if capa2 else {}
detail = first_item.get('detail',{})
ip = detail.get('ip','no encontrado')
Trucos y consejos prácticos
Cuando se utiliza junto con el agente ipipgo, recuerde lo siguienteTriple golpe de oro::
proxies = {
'http': 'http://user:pass@1.1.1.1:8000',
https: http://user:pass@1.1.1.1:8000
}
resp = requests.get('https://需要访问的地址', proxies=proxies, timeout=5)
resp.raise_for_status() ¡Importante! Informa de un error si encuentras una excepción
datos = resp.json()
sesión de preguntas y respuestas
P: ¿Por qué mi análisis JSON sigue informando de errores?
R: 80% de estos tres problemas: 1) la propia petición de red falló 2) el retorno no es el formato JSON estándar 3) no manejó excepciones. Sugerimos usar try...except para envolver el proceso de parseo
P: ¿Cómo puedo probar rápidamente la disponibilidad de la IP proxy de ipipgo?
R: Puede utilizar este código de comprobación rápida:
importar peticiones
from concurrent.futures import ThreadPoolExecutor
def prueba_proxy(proxy)::
try: resp = requests.get('')
resp = requests.get('http://ip.ipipgo.com/checkip', proxies={'http':proxy}, timeout=3), timeout=3)
proxies={'http':proxy}, timeout=3)
return "success" if resp.status_code == 200 else "failure"
excepto
return "timeout"
Probar múltiples IPs al mismo tiempo con múltiples hilos
con ThreadPoolExecutor(10) como exe: results = exe.map(test_proxy, test_proxy, test_proxy, test_proxy)
resultados = exe.map(prueba_proxy, ['1.1.1.1:8000','2.2.2.2:9000'])
P: ¿Por qué recomienda utilizar los servicios de ipipgo?
R: Tres razones de peso: 1) pool de IP exclusivo sin caídas 2) soporte de pago por volumen sin derroches 3) disponer de un servicio técnico de atención al cliente profesional en espera 7×24 horas. Especialmente cuando se recopilan datos a gran escala, un servicio proxy estable es su chaleco antibalas digital.

