
Manos a la obra con Python para jugar con datos JSON de IPs proxy
El viejo hierro dedicado a la recopilación de datos, ¡preste atención! Hoy vamos a utilizar Python para manejar los datos JSON devueltos por la interfaz IP del proxy. No desprecies este enlace, si no lo manejas bien, tu crawler se paralizará in situ en cuestión de minutos. Tomemos como ejemplo la respuesta de la API de ipipgo, para enseñarte a evitar esos pozos.
Funcionamiento básico: análisis JSON de tres ejes
No se asuste cuando reciba una respuesta de la API, primero confirme que no es JSON propiamente dicho.response.json()Antes del método, recuerda añadir una excepción:
solicitudes de importación
try: resp = requests.get('')
resp = requests.get('https://api.ipipgo.com/getproxy')
datos = resp.json()
except ErrorValor.
print("¡Maldita sea! La interfaz no devuelve el JSON correcto.")
Céntrese en estos campos cuando obtenga los datos:
– lista_proxyLista de direcciones IP
– Hora_de_vencimientoFecha de caducidad
– regiónAtribución de IP
Consejos para la integración de IP proxy
Introduce la IP proxy de ipipgo en las peticiones, ¡no te limites a copiar el código de ejemplo! Tienes que manejar el tiempo de expiración dinámicamente:
from datetime import datetime
def get_proxy().
Aquí llamamos a la API de ipipgo.
proxies = {
"http": f "http://{nuevo_ip}:{puerto}",
"https": f "http://{new_ip}:{port}"
}
expire = datetime.fromtimestamp(data['expire_time'])
print(f "Esta IP dura hasta {expire} y luego hay que cambiarla")
devolver proxies
Guía Anti-Rollover de Manejo de Excepciones
Aquí es donde es más probable que las IP proxy se vuelvan locas:
| Tipo de error | prescripción |
|---|---|
| Error de conexión | Cambio inmediato a la nueva IP |
| Tiempo de espera | Espere 3 segundos antes de volver a intentarlo. |
| Código de estado 403 | Comprobar si la cabecera de la solicitud es con autenticación |
RecomendadoreintentoLa biblioteca hace reintentos inteligentes:
from retrying import retry
@retry(stop_max_attempt_number=3)
def safe_request(url): return requests.get(url, proxies=get_proxy(), timeout=5)
return requests.get(url, proxies=get_proxy(), timeout=5)
Práctico botiquín de primeros auxilios de garantía de calidad
Q:¿Qué debo hacer si todas las IP proxy se cuelgan de repente?
R: El 80% de la concurrencia está sobreutilizada, el paquete de ipipgo tiene unRenovación automática de la piscinabasta con activarla en la consola
P: ¿Cómo puedo saber si la propiedad intelectual está realmente en vigor?
A: envíe una solicitud a la interfaz de verificación de ipipgo, la IP de retorno y el puerto no coinciden, entonces apresúrese a cambiar el
P: ¿Qué ocurre si necesito gestionar varios grupos de agentes al mismo tiempo?
R: Pruebe ipipgo'sAislamiento multicanalFunciones, diferentes grupos de IP para diferentes servicios para evitar la influencia mutua
Optimización cuidadosa del rendimiento
¿Qué te parece? Muchos novatos cometen el error de llamar a la API para obtener la IP para cada solicitud.caché local+refrescar adelante::
importar roscado
clase ProxyPool.
def __init__(self).
self.lock = threading.
self.refresh() cargar un lote al inicio
def refresh(self).
con self.lock.
Llama a la interfaz ipipgo para reponer nuevas IPs.
self.pool = deque(data['lista_de_proxy'])
def get_ip(self).
if len(self.pool) < 5: refrescar antes si queda poca
self.refresh()
return self.pool.pop()
Un último consejo: ipipgo'spago por volumenLos paquetes son especialmente adecuados para pruebas de estrés, utiliza todo lo que puedas, no seas tonto y compra directamente una suscripción mensual. La próxima vez que te encuentres con un problema de parseo de JSON, recuerda comprobar primero que la cabecera de respuesta no esapplication/jsonNo sé si es la interfaz la que devuelve la página de error HTML, pero si es la interfaz la que devuelve la página de error, seguro que es la interfaz.

