Ir al contenido

Cómo usar proxies con Scrapy: Guía completa

TL;DR

Aprenda cómo configurar GProxy residential y datacenter proxies con Scrapy para web scraping a gran escala. Cubre el middleware setup, proxy rotation y error handling.

Idioma: Python

Requisitos previos

  • Python 3.8+ instalado
  • Scrapy 2.x instalado (pip install scrapy)
  • Cuenta de GProxy con plan de proxy activo
  • Familiaridad básica con Scrapy spiders y settings

Configuración paso a paso

1

Instalar Scrapy

Instalar Scrapy y crear un nuevo proyecto

pip install scrapy
scrapy startproject myproject
cd myproject
2

Configurar proxy en settings.py

Agregar configuraciones de proxy al archivo settings.py de tu proyecto

# settings.py
HTTPPROXY_ENABLED = True
DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.GProxyMiddleware': 350,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 400,
}
3

Crear middleware de proxy

Crear un middleware personalizado en middlewares.py

class GProxyMiddleware:
    def process_request(self, request, spider):
        proxy = 'http://USER:PASS@proxy.gproxy.net:1000'
        request.meta['proxy'] = proxy
4

Agregar soporte de rotación

Para la rotación automática de IP, utiliza el endpoint de backconnect

class GProxyRotatingMiddleware:
    def process_request(self, request, spider):
        request.meta['proxy'] = 'http://USER-country-us:PASS@proxy.gproxy.net:1000'
    
    def process_exception(self, request, exception, spider):
        return request  # retry with new IP
5

Configurar ajustes de reintento

Agregar configuración de reintento para mayor confiabilidad

# settings.py
RETRY_ENABLED = True
RETRY_TIMES = 5
RETRY_HTTP_CODES = [403, 407, 429, 500, 502, 503]
DOWNLOAD_TIMEOUT = 30
6

Ejecutar tu spider

Probar la configuración del proxy

scrapy crawl myspider -o output.json

Ejemplos de código

Spider de Scrapy básico con GProxy · python
import scrapy

class ProxySpider(scrapy.Spider):
    name = 'proxy_spider'
    start_urls = ['https://httpbin.org/ip']

    custom_settings = {
        'DOWNLOADER_MIDDLEWARES': {
            'myproject.middlewares.GProxyMiddleware': 350,
        },
        'CONCURRENT_REQUESTS': 32,
        'DOWNLOAD_DELAY': 0.5,
        'DOWNLOAD_TIMEOUT': 30,
    }

    def parse(self, response):
        yield {'ip': response.json()['origin']}
Middleware de proxy rotativo completo · python
import logging

logger = logging.getLogger(__name__)

class GProxyMiddleware:
    PROXY_URL = 'http://USER:PASS@proxy.gproxy.net:1000'

    @classmethod
    def from_crawler(cls, crawler):
        return cls()

    def process_request(self, request, spider):
        request.meta['proxy'] = self.PROXY_URL
        request.headers.pop('Proxy-Authorization', None)

    def process_response(self, request, response, spider):
        if response.status in [403, 407, 429]:
            logger.warning(f'Proxy error {response.status} for {request.url}')
            return request
        return response

    def process_exception(self, request, exception, spider):
        logger.error(f'Proxy exception: {exception}')
        return request
Spider con geo-segmentación · python
import scrapy

class GeoSpider(scrapy.Spider):
    name = 'geo_spider'
    
    custom_settings = {
        'CONCURRENT_REQUESTS': 16,
    }

    def start_requests(self):
        countries = ['us', 'de', 'gb', 'fr', 'jp']
        for country in countries:
            proxy = f'http://USER-country-{country}:PASS@proxy.gproxy.net:1000'
            yield scrapy.Request(
                url='https://httpbin.org/ip',
                meta={'proxy': proxy},
                cb_kwargs={'country': country},
            )

    def parse(self, response, country):
        yield {
            'country': country,
            'ip': response.json()['origin'],
        }

¿Por qué usar proxies con Scrapy?

Scrapy es el framework de web scraping de Python más popular, impulsando millones de tareas de rastreo diariamente. Al realizar scraping a escala, inevitablemente enfrentará bloqueos de IP, CAPTCHAs y límites de tasa. El pool de residential proxy de GProxy de más de 10M+ de IPs en más de 150 países resuelve estos desafíos rotando su IP de salida automáticamente.

Métodos de autenticación de Proxy

GProxy admite dos métodos de autenticación con Scrapy: autenticación por nombre de usuario/contraseña a través de la URL del proxy, y autenticación por lista blanca de IP donde agrega la IP de su servidor al panel de GProxy. Ambos funcionan a la perfección con el soporte de proxy integrado de Scrapy.

Configuración básica de Proxy

La forma más sencilla de agregar proxies de GProxy a Scrapy es a través del archivo settings.py. Establezca las variables de entorno HTTP_PROXY y HTTPS_PROXY, o configúrelas directamente en los ajustes personalizados de su spider. Para rotar proxies, querrá usar un middleware de descarga personalizado que asigne una nueva URL de proxy por cada request.

Middleware de rotación de Proxy personalizado

Para el scraping en producción, un middleware personalizado le brinda control total sobre la asignación de proxy. El middleware intercepta cada request antes de que se envíe, asigna un endpoint de proxy con parámetros de rotación y maneja errores relacionados con el proxy como tiempos de espera o fallos de autenticación 407. El endpoint de backconnect de GProxy maneja la rotación del lado del servidor, por lo que cada conexión a través del mismo endpoint obtiene una IP diferente.

Manejo de errores y reintentos

Un scraping robusto requiere un manejo de errores adecuado. Configure el middleware de reintento de Scrapy para que funcione con su configuración de proxy: reintente en los códigos de estado 403, 407, 429 y 503, y establezca un recuento de reintentos razonable (3-5 intentos). Las sesiones persistentes de GProxy le permiten mantener la misma IP en los reintentos cuando sea necesario, lo cual es útil para flujos de varias páginas.

Requests concurrentes y rendimiento

Scrapy destaca en el scraping concurrente, y la infraestructura de GProxy maneja bien la alta concurrencia. Comience con CONCURRENT_REQUESTS = 32 y DOWNLOAD_DELAY = 0.5, luego ajuste según el comportamiento del sitio objetivo. Con los residential proxies de GProxy, normalmente puede ejecutar entre 50-100 requests concurrentes sin problemas.

Geo-Targeting con Scrapy

GProxy admite la segmentación por país y ciudad. Pase el país de destino como parte de sus credenciales de proxy (por ejemplo, user-country-us) para enrutar los requests a través de IPs en esa ubicación. Esto es esencial para realizar scraping de contenido con restricciones geográficas o resultados de búsqueda localizados.

Casos de uso

E-commerce Price Monitoring

Scrape precios de productos en múltiples minoristas con proxies geo-localizados para ver precios localizados.

SERP Tracking

Monitoree los rankings de los motores de búsqueda desde diferentes ubicaciones utilizando IPs residenciales específicas de cada país.

Lead Generation

Extraiga listados de negocios y datos de contacto a escala con IPs rotativas para evitar la detección.

Content Aggregation

Recopile artículos, reseñas y listados de múltiples fuentes con una rotación de proxy confiable.

Consejos profesionales
Use AUTOTHROTTLE_ENABLED = True para el ajuste automático de velocidad. Establezca CONCURRENT_REQUESTS_PER_DOMAIN para limitar la carga por sitio. Habilite el almacenamiento en caché HTTP durante el desarrollo para evitar consumir el ancho de banda del proxy. Utilice el paquete scrapy-rotating-proxies para una gestión avanzada del pool.

FAQ

¿Soporta Scrapy proxies SOCKS5? +
Scrapy no soporta SOCKS5 de forma nativa. Use los endpoints HTTP/HTTPS de GProxy en su lugar, o instale scrapy-splash o pysocks para soporte SOCKS5.
¿Cuántas solicitudes concurrentes puedo ejecutar? +
GProxy maneja bien la alta concurrencia. Comience con 32 solicitudes concurrentes y escale hasta más de 100 dependiendo de su plan y del sitio de destino.
¿Puedo usar sesiones persistentes (sticky sessions) con Scrapy? +
Sí. Use el parámetro de sesión de GProxy en la url del proxy para mantener la misma IP a través de múltiples solicitudes — útil para flujos de login o paginación.
¿Cómo manejo los CAPTCHAs? +
Las IPs residenciales de GProxy reducen significativamente las tasas de CAPTCHA. Para los CAPTCHAs restantes, integre un servicio de resolución o aumente la frecuencia de rotación.

¿Listo para empezar?

Comience con GProxy en minutos — proxies residenciales desde $0.85/GB, IPv6 desde $0.03/proxy, pago por uso.

Otras integraciones

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.