🥳Únase a la Comunidad Scrapeless y Solicite su prueba gratuita para acceder a nuestro potente kit de herramientas de Web Scraping.
Volver al blog

Cómo usar Pyppeteer con un proxy en 2024

James Thompson
James Thompson

Scraping and Proxy Management Expert

18-Sep-2024

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 Copy
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 Copy
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 Copy
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 Copy
# ...
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 Copy
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 Copy
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 Copy
# ...
    # 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 Copy
# ...
    # 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 Copy
# ...
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 Copy
# ...
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.

Artículos más populares

Catalogar