
Prácticas con peticiones asíncronas HTTPX para jugar con IPs proxy
Recientemente en el grupo de rastreo para ver un montón de pequeños socios se quejaron de que el uso de las solicitudes para hacer la recopilación de datos siempre ser bloqueado IP. hoy cambiamos una nueva arma - HTTPX biblioteca, esta cosa función de solicitud asíncrona es muy bueno, con el proxy IP es simplemente como un tigre con alas. Vamos a utilizar nuestro propio servicio de proxy ipipgo para demostrar, de la mano para enseñarle cómo evitar mecanismo anti-escalada.
HTTPX Basic Operación Triple Ataque
Primero instalemos una biblioteca:pip install httpx. El uso básico es similar al de las peticiones, pero con más soporte asíncrono. Mira este código:
importar httpx
Petición GET normal
con httpx.Client() como cliente:
response = cliente.get('https://example.com')
print(código_estado_respuesta)
Añadiendo proxies a la pose (¡foco aquí!)
proxies = "http://用户名:密码@gateway.ipipgo.com:9021"
respuesta = httpx.get("https://ip.ipipgo.com", proxies=proxies)
print(f "IP actual: {response.json()['ip']}")
Tenga en cuenta que la dirección del proxy enpasarela.ipipgo.comEs la entrada de nuestro servicio, el puerto es diferente para los diferentes paquetes. La ventaja de utilizar su propio servicio es que el grupo de IP es lo suficientemente grande como para cambiar automáticamente sin tener que preocuparse por ello.
La forma correcta de abrir una petición asíncrona
Las peticiones síncronas pueden matarte en un santiamén cuando tienes que capturar en masa. ¡Vete a lo asíncrono! Mira esta operación de dios:
importar asyncio
importar httpx
async def fetch(url).
async with httpx.AsyncClient(
proxies="http://user:pass@gateway.ipipgo.com:9021"
) as client: resp = await client.get(url)
resp = await cliente.get(url)
return resp.text
100 peticiones al mismo tiempo sin retrasos
urls = ["https://example.com/page/{}".format(i) for i in range(100)]
results = asyncio.run(asyncio.gather([fetch(url) for url in urls]))
Aquí se utilizan los ipipgoPaquetes de agencia a largo plazoespecialmente para este escenario de peticiones de alta frecuencia. Recuerde utilizar un cliente asíncrono, el cliente normal arrastrará los pies.
Guía práctica de la PI por poderes para evitar escollos
Algunos escollos que suelen encontrarse en el desarrollo real:
| fenómeno problemático | prescripción |
|---|---|
| Tiempo de espera de la conexión | Conmutación de los diferentes nodos de la sala de servidores de ipipgo |
| Devolución 407 error | Compruebe si la contraseña de la cuenta tiene caracteres especiales |
| tiempo de respuesta lento | Activación de la multiplexación de enlaces para HTTPX |
Se recomienda añadir un mecanismo de reintento en el código con ipipgo'sCambio automático de IPLa funcionalidad es mucho más sencilla. Su API admite el cambio automático de IP en función del número de fallos, lo que resulta especialmente útil para la recopilación a gran escala.
Hora de la GC: Resumen de las preguntas más frecuentes
P: ¿Qué debo hacer si el agente no funciona cuando lo uso?
R: Se recomienda utilizar el paquete IP Residencial Dinámica de ipipgo, que cambia automáticamente la IP para cada solicitud, y simplemente no da a la otra parte la oportunidad de bloquear.
P: ¿Las peticiones asíncronas se atascan de repente y no se mueven?
A:Comprueba si el parámetro timeout no está puesto, HTTPX por defecto espera infinita. Añade el parámetro timeout=30, será estable.
P: ¿Y si necesito un proxy anónimo alto?
R: Elija directamente ipipgo'sServicios de agencia para empresasLa cabecera de la solicitud no expone en absoluto las características del proxy, y ha sido comprobada mediante la inspección estricta de un determinado este.
Programa de configuración definitivo
Por último, aquí está mi plantilla de configuración:
cliente = httpx.AsyncClient(
proxies={
"http://": "http://user:pass@gateway.ipipgo.com:9021",
"https://": "http://user:pass@gateway.ipipgo.com:9021"
},
timeout=30.0,
limits=httpx.Limits(max_connections=100),
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
)
Con esta configuración, no hay presión para hacer millones de peticiones con los proxies de ipipgo. Su pool de IPs se actualiza con la suficiente frecuencia como para que básicamente no te encuentres con bombardeos CAPTCHA. Por último, recordar, hacer la recopilación de datos para cumplir con las reglas del sitio, el uso de proxy no es para el propósito de sabotaje ha.

