Cómo usar Pyppeteer con un proxy en 2024

Scraping and Proxy Management Expert
Es fundamental enrutar solicitudes HTTP a través de múltiples direcciones IP para evitar ser bloqueado durante el web scraping. Por eso, en este tutorial aprenderemos a construir un proxy Pyppeteer.
Requisitos previos
Asegúrate de que tu sistema local ejecute Python 3.6 o superior.
Luego, utiliza pip para instalar Pyppeteer de PyPI ejecutando la línea a continuación.
language
pip install pyppeteer
¿Estás cansado de los bloqueos continuos de web scraping?
Scrapeless: ¡la mejor solución de scraping online todo en uno disponible!
Mantente anónimo y evita bloqueos basados en IP con nuestra rotación inteligente de proxies de alto rendimiento:
¡Pruébalo gratis!
Cómo utilizar Pyppeteer como un proxy
Para comenzar, escribe el script scraper.py
para solicitar tu dirección IP actual desde ident.me
.
language
import asyncio
from pyppeteer import launch
async def main():
# Crea una nueva instancia de navegador sin cabeza
browser = await launch()
# Crea una nueva página
page = await browser.newPage()
# Navega al sitio web de destino
await page.goto('https://ident.me')
# Selecciona el elemento del cuerpo
body = await page.querySelector('body')
# Obtiene el contenido de texto del elemento seleccionado
content = await page.evaluate('(element) => element.textContent', body)
# Imprime el resultado
print(content)
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
Para obtener el contenido del cuerpo de la página de destino, ejecuta el script.
language
python scraper.py
Es hora de actualizar tu script para incluir un proxy Pyppeteer. Para hacerlo, obtén un proxy gratuito de FreeProxyList (es posible que no puedas utilizar el que usamos).
El script scraper.py
utiliza la función launch()
, que abre una nueva instancia de navegador y te permite pasar ciertos parámetros. Establece el parámetro --proxy-server
para indicar al navegador que enrute las solicitudes de Pyppeteer a través de un proxy. Una de las opciones es args
, que es una lista de argumentos adicionales que se enviarán al proceso del navegador.
language
# ...
async def main():
# Crea una nueva instancia de navegador sin cabeza
browser = await launch(args=['--proxy-server=http://20.219.108.109:8080'])
# Crea una nueva página
page = await browser.newPage()
# ...
Este es el código completo:
language
import asyncio
from pyppeteer import launch
async def main():
# Crea una nueva instancia de navegador sin cabeza
browser = await launch(args=['--proxy-server=http://20.219.108.109:8080'])
# Crea una nueva página
page = await browser.newPage()
# Navega al sitio web de destino
await page.goto('https://ident.me')
# Selecciona el elemento del cuerpo
body = await page.querySelector('body')
# Obtiene el contenido de texto del elemento seleccionado
content = await page.evaluate('(element) => element.textContent', body)
# Imprime el resultado
print(content)
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
Esta vez, cuando ejecutes el script nuevamente con la opción de línea de comandos python scraper.py, la dirección IP de tu proxy debería aparecer en la pantalla.
language
20.219.108.109
Autenticación Pyppeteer a través de un proxy
Necesitarás un nombre de usuario y una contraseña para la autenticación si utilizas un proxy premium. Utiliza el parámetro --proxy-auth
para eso.
language
# ...
# Crea una nueva instancia de navegador sin cabeza
browser = await launch(args=[
'--proxy-server=http://20.219.108.109:8080'
'--proxy-auth=<YOUR_USERNAME>:<YOUR_PASSWORD>'
])
# ...
Como alternativa, puedes autenticarte utilizando la API de la página como se muestra a continuación:
language
# ...
# Crea una nueva página
page = await browser.newPage()
await page.authenticate({ 'username': '<YOUR_USERNAME>', 'password': '<YOUR_PASSWORD>' })
# ...
Utiliza Pyppeteer para configurar un proxy dinámico
Para evitar que te incluyan en la lista negra, debes utilizar un proxy dinámico para el web scraping en lugar del proxy estático que utilizaste anteriormente. Con Pyppeteer, puedes crear varias instancias de navegador, cada una con una configuración de proxy única.
Para empezar, obtén proxies gratuitos adicionales y compila una lista de ellos:
language
# ...
import random
proxies = [
'http://20.219.108.109:8080',
'http://210.22.77.94:9002',
'http://103.150.18.218:80',
]
# ...
Luego, escribe una función asíncrona que realice una solicitud Pyppeteer a ident.me
utilizando una función asíncrona que acepte un proxy como argumento:
language
# ...
async def init_pyppeteer_proxy_request(url):
# Crea una nueva instancia de navegador sin cabeza
browser = await launch(args=[
f'--proxy-server={url}',
])
# Crea una nueva página
page = await browser.newPage()
# Navega al sitio web de destino
await page.goto('https://ident.me')
# Selecciona el elemento del cuerpo
body = await page.querySelector('body')
# Obtiene el contenido de texto del elemento seleccionado
content = await page.evaluate('(element) => element.textContent', body)
# Imprime el resultado
print(content)
```python
import asyncio
from pyppeteer import launch
import random
proxies = [
'http://20.219.108.109:8080',
'http://210.22.77.94:9002',
'http://103.150.18.218:80',
]
async def init_pyppeteer_proxy_request(url):
# Crea una nueva instancia de navegador sin cabeza
browser = await launch(args=[
f'--proxy-server={url}',
])
# Crea una nueva página
page = await browser.newPage()
# Navega al sitio web de destino
await page.goto('https://ident.me')
# Selecciona el elemento del cuerpo
body = await page.querySelector('body')
# Obtén el contenido de texto del elemento seleccionado
content = await page.evaluate('(element) => element.textContent', body)
# Imprime el resultado
print(content)
await browser.close()
async def main():
for i in range(3):
await init_pyppeteer_proxy_request(random.choice(proxies))
asyncio.get_event_loop().run_until_complete(main())
Conclusión
El uso de un proxy con Pyppeteer puede aumentar considerablemente el éxito de tu raspado web, y ahora sabes cómo enviar solicitudes usando tanto proxies estáticos como dinámicos.
También descubriste que una herramienta diferente puede completar la tarea de manera más rápida y precisa. La herramienta de raspado web de Scrapeless podría ser tu aliada si necesitas raspar a gran escala sin preocuparte por la infraestructura y tener mayores garantías de que obtendrás los datos que necesitas.
En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.