Volver al blog

Guía Completa de Proxies para Web Scraping y Extracción de Datos

CRÍTICO IMPORTANTE: - Traduce SOLAMENTE al español, NO mezcles idiomas - NO incluyas palabras de otros idiomas en la traducción - Utiliza SOLAMENTE caracteres y el alfabeto español - NUNCA traduzcas códigos promocionales (por ejemplo, ARTHELLO) - déjalos como están Texto para traducir: En este artículo: Descubrirás por qué los servidores proxy se han convertido en una herramienta esencial para el web scraping en 2025, cómo funcionan los sistemas anti-bot modernos (Cloudflare, DataDome), qué tipos de proxy son mejores...

📅14 de noviembre de 2025

En este artículo: Descubrirá por qué los servidores proxy se han convertido en una herramienta esencial para el web scraping en 2025, cómo funcionan los sistemas anti-bot modernos (Cloudflare, DataDome), qué tipos de proxy son mejores para el parsing de datos y cómo elegir el proxy adecuado para sus tareas. El material se basa en datos actuales y experiencia práctica.

🎯 Por qué son necesarios los proxies para el parsing

Web scraping es la recopilación automatizada de datos de sitios web. En 2025, es una tecnología fundamental para los negocios: monitoreo de precios de la competencia, recopilación de datos para aprendizaje automático, agregación de contenido, análisis de mercado. Sin embargo, los sitios web modernos se defienden activamente contra los bots, y el parsing efectivo es prácticamente imposible sin proxies.

Razones principales para usar proxies

🚫 Evitar bloqueos por IP

Los sitios web rastrean la cantidad de solicitudes desde cada dirección IP. Al exceder el límite (generalmente 10-100 solicitudes por minuto), se le bloquea. Los proxies permiten distribuir las solicitudes entre muchas direcciones IP, haciéndole invisible.

🌍 Acceso geolocalizado

Muchos sitios muestran contenido diferente según el país del usuario. Para el parsing de datos globales, se necesitan proxies de diferentes países. Por ejemplo, para monitorear precios de Amazon en EE. UU., se necesitan IPs estadounidenses.

⚡ Procesamiento paralelo

Sin proxies, está limitado a una sola IP y solicitudes secuenciales. Con un pool de proxies, puede realizar cientos de solicitudes paralelas, acelerando el parsing entre 10 y 100 veces. Crítico para grandes volúmenes de datos.

🔒 Anonimato y seguridad

Los proxies ocultan su IP real, protegiéndole del retargeting, el seguimiento y los posibles riesgos legales. Especialmente importante al analizar datos sensibles o realizar inteligencia competitiva.

⚠️ ¿Qué sucede sin proxies?

  • Bloqueo instantáneo — su IP será bloqueada después de 50-100 solicitudes
  • CAPTCHA en cada paso — tendrá que resolver captchas manualmente
  • Datos incompletos — solo obtendrá una muestra limitada
  • Baja velocidad — una IP equivale a solicitudes secuenciales
  • Detección de bot — los sitios modernos identificarán la automatización al instante

🌐 El panorama del web scraping en 2025

La industria del web scraping en 2025 está experimentando cambios sin precedentes. Por un lado, la demanda de datos crece exponencialmente: los modelos de IA requieren conjuntos de datos de entrenamiento, y los negocios necesitan análisis en tiempo real. Por otro lado, las defensas se vuelven cada vez más sofisticadas.

Tendencias clave de 2025

1. Sistemas anti-bot impulsados por IA

El aprendizaje automático ahora analiza patrones de comportamiento: movimientos del ratón, velocidad de desplazamiento, tiempo entre clics. Sistemas como DataDome identifican bots con una precisión del 99.99% en menos de 2 milisegundos.

  • Análisis de señales del lado del cliente y del servidor
  • Huellas de comportamiento (Behavioral fingerprinting)
  • Tasa de falsos positivos inferior al 0.01%

2. Protección multicapa

Los sitios ya no dependen de una sola tecnología. Cloudflare Bot Management combina desafíos de JS, huellas TLS, bases de datos de reputación de IP y análisis de comportamiento. Evadir todas las capas simultáneamente es una tarea difícil.

3. Rate limiting como estándar

Prácticamente todos los sitios importantes aplican limitación de tasa: restricción de la frecuencia de solicitudes. Límites típicos: 10-100 solicitudes/minuto para APIs públicas, 1-5 solicitudes/segundo para páginas normales. El rate-limiting con desafío aplica CAPTCHA al superar los umbrales.

Estadísticas del mercado

Indicador 2023 2025 Cambio
Sitios con protección anti-bot 43% 78% +35%
Tasa de éxito sin proxy 25% 8% -17%
Límite de tasa promedio (solic/min) 150 60 -60%
Precio de proxies de calidad $5-12/GB $1.5-4/GB -50%

🛡️ Sistemas anti-bot modernos

Comprender cómo funcionan los sistemas anti-bot es fundamental para un scraping exitoso. En 2025, las defensas han pasado de simples bloqueos de IP a sistemas multicapa complejos con aprendizaje automático.

Métodos de detección de bots

Reputación de IP

Bases de datos de IPs de proxy conocidas (las IPs de centro de datos se detectan fácilmente). Las direcciones IP se clasifican por ASN (Número de Sistema Autónomo), historial de abuso y tipo (residencial/centro de datos).

Huella TLS/HTTP

Análisis del handshake TLS (huella JA3), orden de encabezados HTTP, versiones de protocolo. Los bots a menudo utilizan bibliotecas estándar con patrones característicos.

Desafíos de JavaScript

Ejecución de cálculos complejos de JS en el navegador. Los clientes HTTP simples (requests, curl) no pueden ejecutar JS. Se requieren navegadores sin cabeza (Puppeteer, Selenium).

Análisis de Comportamiento

Seguimiento de movimientos del ratón, velocidad de escritura, patrones de desplazamiento. Los modelos de IA están entrenados con millones de sesiones de usuarios reales y bots.

Niveles de bloqueo

1. Restricciones leves

  • Desafíos CAPTCHA
  • Ralentización de respuestas
  • Ocultación parcial de datos

2. Bloqueos medios

  • HTTP 403 Forbidden
  • HTTP 429 Too Many Requests
  • Bloqueo temporal de IP (1-24 horas)

3. Baneo estricto

  • Bloqueo permanente de IP
  • Bloqueo de toda la subred (Clase C)
  • Inclusión en listas negras globales

☁️ Cloudflare, DataDome y otras protecciones

Plataformas anti-bot principales

Cloudflare Bot Management

La protección más popular — utilizada en más del 20% de los sitios web del mundo. Combina múltiples técnicas:

  • Desafío JS — Cloudflare Turnstile (reemplazo de reCAPTCHA)
  • Huella TLS — huellas JA3/JA4
  • Inteligencia de IP — base de millones de proxies conocidos
  • Puntuación de comportamiento — análisis de scroll/mouse/timing
  • Limitación de tasa — límites adaptativos basados en el comportamiento

Evasión: Requiere proxies residenciales/móviles de calidad + navegador sin cabeza con las huellas correctas + comportamiento similar al humano.

DataDome

Protección impulsada por IA con enfoque en el aprendizaje automático. Toma decisiones en menos de 2 ms con una precisión del 99.99%.

  • Modelos de ML — entrenados con petabytes de datos
  • Señales de cliente + servidor — análisis bidireccional
  • Análisis ASN de IP — evaluación de reputación por ASN
  • Cadencia de solicitud — análisis de frecuencia y patrones de solicitud
  • Entropía de encabezados — detección de anomalías en encabezados

Tasa de falsos positivos: menos del 0.01% — el sistema es muy preciso, pero agresivo con los proxies.

PerimeterX (HUMAN)

Análisis de comportamiento basado en biometría. Rastrea micro-movimientos del ratón, presión en la pantalla táctil, patrones de navegación.

Imperva (Incapsula)

Protección de nivel empresarial. Se utiliza en sitios web financieros y gubernamentales. Muy difícil de evadir sin proxies residenciales premium.

⏱️ Limitación de tasa (Rate Limiting) y detección de patrones

Rate limiting es la restricción de la cantidad de solicitudes desde una fuente en un período determinado. Incluso con proxies, debe gestionar la frecuencia de las solicitudes correctamente, o el patrón será reconocido.

Tipos de limitación de tasa

1. Ventana Fija (Fixed Window)

Límite fijo por ventana de tiempo. Por ejemplo: 100 solicitudes por minuto. A las 10:00:00, el contador se reinicia.

Ventana 10:00-10:01: máximo 100 solicitudes
Ventana 10:01-10:02: el contador se reinicia

2. Ventana Deslizante (Sliding Window)

Ventana deslizante. Considera las solicitudes de los últimos N segundos desde el momento actual. Es un método más preciso y justo.

3. Cubo de Tokens (Token Bucket)

Tiene un "cubo de tokens" (ej. 100). Cada solicitud gasta un token. Los tokens se reponen a una velocidad de X por segundo. Permite ráfagas cortas de actividad.

🎯 Estrategias para evadir el rate limiting

  • Rotación de proxies — cada IP tiene su límite, usamos un pool
  • Añadir retrasos — imitar el comportamiento humano (0.5-3 seg entre solicitudes)
  • Aleatorización de intervalos — no exactamente 1 seg, sino 0.8-1.5 seg al azar
  • Respetar robots.txt — cumplir con el Crawl-delay
  • Distribución de carga — parsear en múltiples hilos con diferentes IPs

🔄 Tipos de proxies para scraping

No todos los proxies son igualmente útiles para el parsing. La elección del tipo de proxy depende del sitio objetivo, el volumen de datos, el presupuesto y el nivel de protección.

🏢

Proxies de Centro de Datos (Datacenter)

IPs de centros de datos (AWS, Google Cloud, OVH). Rápidos y baratos, pero fácilmente detectables por los sitios.

✅ Ventajas:

  • Los más baratos ($1.5-3/GB)
  • Alta velocidad (100+ Mbps)
  • IPs estables

❌ Desventajas:

  • Fácilmente detectables (ASN conocido)
  • Alta tasa de bloqueo (50-80%)
  • No aptos para sitios complejos

Para: Sitios simples sin protección, APIs, proyectos internos

🏠

Proxies Residenciales (Residential)

IPs de usuarios domésticos reales a través de ISP (proveedores de servicios de Internet). Parecen usuarios normales.

✅ Ventajas:

  • Parecen legítimos
  • Baja tasa de bloqueo (10-20%)
  • Pools de IPs enormes (millones)
  • Geo-targeting por países/ciudades

❌ Desventajas:

  • Más caros ($2.5-10/GB)
  • Más lentos (10-50 Mbps)
  • IPs inestables (pueden cambiar)

Para: E-commerce, redes sociales, sitios con protección, monitoreo SEO

📱

Proxies Móviles (Mobile)

IPs de operadores móviles (3G/4G/5G). Los más confiables, ya que miles de usuarios comparten una IP.

✅ Ventajas:

  • Prácticamente no son bloqueados (tasa de bloqueo ~5%)
  • IP compartida (miles detrás de una IP)
  • Ideales para protecciones estrictas
  • Rotación automática de IP

❌ Desventajas:

  • Los más caros ($3-15/GB)
  • Más lentos que los residenciales
  • Pool de IPs limitado

Para: Instagram, TikTok, bancos, máxima protección

⚔️ Comparación: Centro de Datos vs. Residencial vs. Móvil

Parámetro Centro de Datos Residencial Móvil
Tasa de éxito 20-50% 80-90% 95%+
Velocidad 100+ Mbps 10-50 Mbps 5-30 Mbps
Precio/GB $1.5-3 $2.5-8 $3-12
Tamaño del pool 10K-100K 10M-100M 1M-10M
Detectabilidad Alta Baja Muy baja
Geo-targeting País/Ciudad País/Ciudad/ISP País/Operador
Mejor uso para APIs, sitios simples E-commerce, SEO Redes sociales, protección estricta

💡 Recomendación: Comience con proxies residenciales: el equilibrio óptimo entre precio y calidad para la mayoría de las tareas. Datacenter solo para sitios simples. Móvil para recursos altamente protegidos.

🎯 Cómo elegir un proxy para sus tareas

Matriz de selección de proxies

Criterios de selección:

1. Nivel de protección del sitio objetivo

  • Sin protección: Proxies de Centro de Datos
  • Protección básica (rate limiting): Datacenter con rotación
  • Media (Cloudflare Básico): Proxies Residenciales
  • Alta (Cloudflare Pro, DataDome): Residenciales Premium
  • Máxima (PerimeterX, redes sociales): Proxies Móviles

2. Volumen de datos

  • Menos de 10 GB/mes: Cualquier tipo
  • 10-100 GB/mes: Residenciales o Datacenter económicos
  • 100-1000 GB/mes: Combinación Datacenter + Residencial
  • Más de 1 TB/mes: Datacenter masivos + Residenciales selectivos

3. Presupuesto

  • Hasta $100/mes: Proxies de Centro de Datos
  • $100-500/mes: Proxies Residenciales
  • $500-2000/mes: Residenciales Premium + Móviles para tareas críticas
  • Más de $2000/mes: Pools mixtos según la tarea

4. Requisitos geográficos

  • Sin restricciones geográficas: Cualquier tipo
  • País específico: Residenciales con geo-targeting
  • Ciudad/Región específica: Residenciales Premium
  • ISP específico: Residenciales con targeting por ISP

✅ Ejemplos de uso

Parsing de precios de Amazon/eBay

Recomendación: Proxies Residenciales del país objetivo
Por qué: Protección media + contenido geolocalizado + gran volumen de datos

Recopilación de datos de Instagram/TikTok

Recomendación: Proxies Móviles
Por qué: Protección anti-bot agresiva + plataforma móvil

Parsing de sitios de noticias

Recomendación: Proxies de Centro de Datos con rotación
Por qué: Generalmente sin protección seria + gran volumen

Monitoreo SEO de Google

Recomendación: Proxies Residenciales de diferentes países
Por qué: Resultados de búsqueda geolocalizados + detección de IPs de centro de datos

💰 Análisis de costes de proxies para scraping

Calcular correctamente el presupuesto de proxies es clave para la rentabilidad del proyecto. Analicemos escenarios reales y calculemos los costes.

Cálculo del tráfico

Fórmula de cálculo

Tráfico mensual = Páginas recolectadas × Tamaño de página × Coeficiente de sobrecarga

  • Tamaño promedio de página HTML: 50-200 KB
  • Con imágenes/CSS/JS: 500 KB - 2 MB
  • Coeficiente de sobrecarga: 1.2-1.5× (reintentos, redirecciones)
  • Endpoints de API: generalmente 1-50 KB

Ejemplos de cálculos

Escenario 1: Parsing de productos de Amazon

Páginas/día: 10,000
Tamaño de página: ~150 KB
Volumen mensual: 10,000 × 150 KB × 30 × 1.3 = 58.5 GB
Tipo de proxy: Residencial
Coste: 58.5 GB × $2.7 = $158/mes

Escenario 2: Monitoreo SEO de Google

Palabras clave: 1,000
Verificaciones/día: 1 vez
Tamaño SERP: ~80 KB
Volumen mensual: 1,000 × 80 KB × 30 × 1.2 = 2.8 GB
Tipo de proxy: Residencial (varios países)
Coste: 2.8 GB × $2.7 = $7.6/mes

Escenario 3: Parsing masivo de noticias

Artículos/día: 50,000
Tamaño del artículo: ~30 KB (solo texto)
Volumen mensual: 50,000 × 30 KB × 30 × 1.2 = 54 GB
Tipo de proxy: Centro de Datos (sitios simples)
Coste: 54 GB × $1.5 = $81/mes

Optimización de costes

1. Almacene en caché los datos

Guarde el HTML localmente y vuelva a analizarlo sin nuevas solicitudes. Ahorro de hasta el 50% del tráfico.

2. Utilice APIs siempre que sea posible

Los endpoints de API devuelven solo JSON (1-50 KB) en lugar de HTML completo (200+ KB). Ahorro del 80-90%.

3. Bloquee imágenes

En Puppeteer/Selenium, bloquee la carga de imágenes, videos y fuentes. Ahorro del 60-70% del tráfico.

4. Analice solo lo nuevo

Utilice checksums o timestamps para determinar cambios. No analice páginas que no han cambiado.

💡 Pro-tip: Estrategia híbrida

Utilice el 70-80% de proxies de centro de datos baratos para el scraping masivo de sitios simples, y el 20-30% de residenciales para sitios complejos con protección. Esto optimiza la relación precio/calidad. Por ejemplo: para 100K páginas, use datacenter para 80K páginas simples ($120) y residenciales para 20K protegidas ($54). Total: $174 en lugar de $270 (ahorro del 35%).

🔄 Estrategias de rotación de direcciones IP

La rotación de proxies es una técnica clave para un scraping exitoso. Una estrategia de rotación adecuada puede aumentar la tasa de éxito del 20% al 95%. En 2025 existen varios enfoques probados.

Estrategias principales

1. Rotación por cada solicitud

Cada solicitud HTTP utiliza una nueva IP. Máximo anonimato, pero puede causar problemas con las sesiones.

Adecuado para:

  • Parsing de listas de productos
  • Recopilación de páginas estáticas
  • Verificación masiva de URLs
  • Scraping de SERP de Google

2. Sesiones Persistentes (Sticky Sessions)

Una IP se utiliza para toda la sesión de usuario (10-30 minutos). Imita el comportamiento de un usuario real.

Adecuado para:

  • Procesos de varios pasos (login → datos)
  • Rellenar formularios
  • Gestión de cuentas
  • Carritos de E-commerce

3. Rotación basada en tiempo

Cambio de IP cada N minutos o después de N solicitudes. Equilibrio entre estabilidad y anonimato.

Adecuado para:

  • Sesiones de parsing largas
  • Llamadas a API con rate limit
  • Monitoreo en tiempo real

4. Rotación inteligente (Impulsada por IA)

El algoritmo decide cuándo cambiar la IP basándose en las respuestas del servidor (429, 403) y los patrones de éxito.

Adecuado para:

  • Sistemas anti-bot complejos
  • Parsing adaptativo
  • Alta eficiencia

💡 Recomendaciones de selección

  • Para alta velocidad: Rotación por cada solicitud + gran pool de proxies
  • Para sitios complejos: Sesiones persistentes + simulación de comportamiento
  • Para APIs: Rotación por tiempo respetando los límites de tasa
  • Para redes sociales: Sesiones persistentes + proxies móviles (mínimo 10 min por IP)

⚖️ Sesiones Rotativas vs. Sesiones Persistentes

Comparación detallada

Criterio Proxies Rotativos Sesiones Persistentes
Cambio de IP Cada solicitud o por temporizador 10-30 minutos por IP
Guardar cookies ❌ No ✅ Sí
Velocidad de parsing Muy alta Media
Evasión de rate limiting Excelente Pobre
Procesos de varios pasos No apto Ideal
Consumo de proxy Eficiente Medio
Detectabilidad Baja Baja
Precio por el mismo volumen Menor Mayor (retención más larga)

🎯 Veredicto: Utilice proxies rotativos para el parsing masivo de datos estáticos. Utilice sesiones persistentes para trabajar con cuentas, formularios y procesos de varios pasos. ¡ProxyCove soporta ambos modos!

🐍 Configuración de proxies en Python Requests

Python Requests es la biblioteca más popular para peticiones HTTP. Configurar un proxy toma literalmente 2 líneas de código.

Configuración básica

Ejemplo más simple

import requests # Proxy de ProxyCove (reemplace con sus datos) proxy = { "http": "http://username:password@gate.proxycove.com:8080", "https": "http://username:password@gate.proxycove.com:8080" } # Realizar la solicitud a través del proxy response = requests.get("https://httpbin.org/ip", proxies=proxy) print(response.json()) # Verá la IP del servidor proxy

✅ Reemplace username:password con sus credenciales de ProxyCove

Rotación de proxies desde una lista

import requests import random # Lista de proxies de ProxyCove (u otros proveedores) proxies_list = [ "http://user1:pass1@gate.proxycove.com:8080", "http://user2:pass2@gate.proxycove.com:8080", "http://user3:pass3@gate.proxycove.com:8080", ] def get_random_proxy(): proxy_url = random.choice(proxies_list) return {"http": proxy_url, "https": proxy_url} # Parsear 100 páginas con rotación urls = [f"https://example.com/page/{i}" for i in range(1, 101)] for url in urls: proxy = get_random_proxy() try: response = requests.get(url, proxies=proxy, timeout=10) print(f"✅ {url}: {response.status_code}") except Exception as e: print(f"❌ {url}: {str(e)}")

Manejo de errores y reintentos (retry)

import requests from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry # Configuración de la estrategia de reintento retry_strategy = Retry( total=3, # 3 intentos backoff_factor=1, # Retraso entre intentos status_forcelist=[429, 500, 502, 503, 504], ) adapter = HTTPAdapter(max_retries=retry_strategy) session = requests.Session() session.mount("http://", adapter) session.mount("https://", adapter) # Proxy proxy = { "http": "http://username:password@gate.proxycove.com:8080", "https": "http://username:password@gate.proxycove.com:8080" } # Solicitud con reintento automático response = session.get( "https://example.com", proxies=proxy, timeout=15 )

🕷️ Configuración de Scrapy con proxies

Scrapy es un framework potente para el scraping a gran escala. Soporta middleware para la rotación automática de proxies.

Método 1: Configuración básica

settings.py

# settings.py # Usamos una variable de entorno para el proxy import os http_proxy = os.getenv('HTTP_PROXY', 'http://user:pass@gate.proxycove.com:8080') # Scrapy usa automáticamente la variable http_proxy DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110, } # Configuración adicional para mejor compatibilidad CONCURRENT_REQUESTS = 16 # Solicitudes paralelas DOWNLOAD_DELAY = 0.5 # Retraso entre solicitudes (segundos) RANDOMIZE_DOWNLOAD_DELAY = True # Aleatorización del retraso

Método 2: Middleware personalizado con rotación

# middlewares.py import random from scrapy import signals class ProxyRotationMiddleware: def __init__(self): self.proxies = [ 'http://user1:pass1@gate.proxycove.com:8080', 'http://user2:pass2@gate.proxycove.com:8080', 'http://user3:pass3@gate.proxycove.com:8080', ] def process_request(self, request, spider): # Elegimos un proxy aleatorio para cada solicitud proxy = random.choice(self.proxies) request.meta['proxy'] = proxy spider.logger.info(f'Usando proxy: {proxy}') # settings.py DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.ProxyRotationMiddleware': 100, 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110, }

Método 3: scrapy-rotating-proxies (Recomendado)

# Instalación pip install scrapy-rotating-proxies # settings.py ROTATING_PROXY_LIST = [ 'http://user1:pass1@gate.proxycove.com:8080', 'http://user2:pass2@gate.proxycove.com:8080', 'http://user3:pass3@gate.proxycove.com:8080', ] DOWNLOADER_MIDDLEWARES = { 'rotating_proxies.middlewares.RotatingProxyMiddleware': 610, 'rotating_proxies.middlewares.BanDetectionMiddleware': 620, } # Configuración para detectar baneos ROTATING_PROXY_BAN_POLICY = 'rotating_proxies.policy.BanDetectionPolicy' ROTATING_PROXY_PAGE_RETRY_TIMES = 5

✅ Rastrea automáticamente los proxies que funcionan y excluye los baneados

🎭 Puppeteer y proxies

Puppeteer es Chrome sin cabeza para sitios pesados en JavaScript. Necesario para evadir desafíos JS (Cloudflare, DataDome).

Node.js + Puppeteer

Ejemplo básico

const puppeteer = require('puppeteer'); (async () => { // Configuración del proxy de ProxyCove const browser = await puppeteer.launch({ headless: true, args: [ '--proxy-server=gate.proxycove.com:8080', '--no-sandbox', '--disable-setuid-sandbox' ] }); const page = await browser.newPage(); // Autenticación (si el proxy requiere usuario/contraseña) await page.authenticate({ username: 'your_username', password: 'your_password' }); // Parsear la página await page.goto('https://example.com'); const content = await page.content(); console.log(content); await browser.close(); })();

Rotación de proxies en Puppeteer

const puppeteer = require('puppeteer'); const proxies = [ { server: 'gate1.proxycove.com:8080', username: 'user1', password: 'pass1' }, { server: 'gate2.proxycove.com:8080', username: 'user2', password: 'pass2' }, { server: 'gate3.proxycove.com:8080', username: 'user3', password: 'pass3' } ]; async function scrapeWithProxy(url, proxyConfig) { const browser = await puppeteer.launch({ headless: true, args: [`--proxy-server=${proxyConfig.server}`] }); const page = await browser.newPage(); await page.authenticate({ username: proxyConfig.username, password: proxyConfig.password }); await page.goto(url, { waitUntil: 'networkidle2' }); const data = await page.evaluate(() => document.body.innerText); await browser.close(); return data; } // Usamos diferentes proxies para diferentes páginas (async () => { const urls = ['https://example.com/page1', 'https://example.com/page2']; for (let i = 0; i < urls.length; i++) { const proxy = proxies[i % proxies.length]; // Rotación const data = await scrapeWithProxy(urls[i], proxy); console.log(`Página ${i + 1}:`, data.substring(0, 100)); } })();

puppeteer-extra con plugins

// npm install puppeteer-extra puppeteer-extra-plugin-stealth const puppeteer = require('puppeteer-extra'); const StealthPlugin = require('puppeteer-extra-plugin-stealth'); // El plugin oculta las señales de navegador sin cabeza puppeteer.use(StealthPlugin()); (async () => { const browser = await puppeteer.launch({ headless: true, args: ['--proxy-server=gate.proxycove.com:8080'] }); const page = await browser.newPage(); await page.authenticate({ username: 'user', password: 'pass' }); // ¡Ahora los sitios no detectarán que es un bot! await page.goto('https://example.com'); await browser.close(); })();

✅ El plugin Stealth oculta las huellas de webdriver, objetos de chrome y otras señales de automatización

🤖 Selenium con proxies (Python)

Selenium es una herramienta clásica para la automatización de navegadores. Soporta Chrome, Firefox y otros navegadores.

Chrome + Selenium

Configuración básica con proxy

from selenium import webdriver from selenium.webdriver.chrome.options import Options # Configuración de Chrome con proxy chrome_options = Options() chrome_options.add_argument('--headless') # Sin GUI chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') # Proxy de ProxyCove proxy = "gate.proxycove.com:8080" chrome_options.add_argument(f'--proxy-server={proxy}') # Crear el driver driver = webdriver.Chrome(options=chrome_options) # Parsear la página driver.get('https://httpbin.org/ip') print(driver.page_source) driver.quit()

Proxy con autenticación (selenium-wire)

# pip install selenium-wire from seleniumwire import webdriver from selenium.webdriver.chrome.options import Options # Configuración del proxy con usuario/contraseña seleniumwire_options = { 'proxy': { 'http': 'http://username:password@gate.proxycove.com:8080', 'https': 'http://username:password@gate.proxycove.com:8080', 'no_proxy': 'localhost,127.0.0.1' } } chrome_options = Options() chrome_options.add_argument('--headless') # Driver con proxy autenticado driver = webdriver.Chrome( options=chrome_options, seleniumwire_options=seleniumwire_options ) driver.get('https://example.com') print(driver.title) driver.quit()

✅ selenium-wire soporta proxies con username:password (Selenium estándar no lo soporta)

Rotación de proxies en Selenium

from seleniumwire import webdriver from selenium.webdriver.chrome.options import Options import random # Lista de proxies proxies = [ 'http://user1:pass1@gate.proxycove.com:8080', 'http://user2:pass2@gate.proxycove.com:8080', 'http://user3:pass3@gate.proxycove.com:8080', ] def create_driver_with_proxy(proxy_url): seleniumwire_options = { 'proxy': { 'http': proxy_url, 'https': proxy_url, } } chrome_options = Options() chrome_options.add_argument('--headless') # Driver con proxy driver = webdriver.Chrome( options=chrome_options, seleniumwire_options=seleniumwire_options ) return driver # Parsear varias páginas con diferentes proxies urls = ['https://example.com/1', 'https://example.com/2', 'https://example.com/3'] for url in urls: proxy = random.choice(proxies) driver = create_driver_with_proxy(proxy) try: driver.get(url) print(f"✅ {url}: {driver.title}") except Exception as e: print(f"❌ {url}: {str(e)}") finally: driver.quit()

📚 Bibliotecas para rotación de proxies

scrapy-rotating-proxies

Rotación automática para Scrapy con detección de baneos.

pip install scrapy-rotating-proxies

requests-ip-rotator

Rotación a través de API Gateway de AWS (IPs gratuitas).

pip install requests-ip-rotator

proxy-requests

Wrapper para requests con rotación y verificación.

pip install proxy-requests

puppeteer-extra-plugin-proxy

Plugin para Puppeteer con rotación de proxies.

npm install puppeteer-extra-plugin-proxy

💻 Ejemplos de código completos

Ejemplo: Parsing de Amazon con rotación

import requests from bs4 import BeautifulSoup import random import time # Proxies de ProxyCove PROXIES = [ {"http": "http://user1:pass1@gate.proxycove.com:8080", "https": "http://user1:pass1@gate.proxycove.com:8080"}, {"http": "http://user2:pass2@gate.proxycove.com:8080", "https": "http://user2:pass2@gate.proxycove.com:8080"}, ] # User agents para rotación USER_AGENTS = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36', ] def scrape_amazon_product(asin): url = f"https://www.amazon.com/dp/{asin}" proxy = random.choice(PROXIES) headers = {'User-Agent': random.choice(USER_AGENTS)} try: response = requests.get(url, proxies=proxy, headers=headers, timeout=15) if response.status_code == 200: soup = BeautifulSoup(response.content, 'html.parser') # Parsear datos title = soup.find('span', {'id': 'productTitle'}) price = soup.find('span', {'class': 'a-price-whole'}) return { 'asin': asin, 'title': title.text.strip() if title else 'N/A', 'price': price.text.strip() if price else 'N/A', } except Exception as e: print(f"Error para {asin}: {str(e)}") return None # Parsear lista de productos asins = ['B08N5WRWNW', 'B07XJ8C8F5', 'B09G9FPHY6'] for asin in asins: product = scrape_amazon_product(asin) if product: print(f"✅ {product['title']}: {product['price']}") time.sleep(random.uniform(2, 5)) # Retraso similar al humano

Ejemplo: Spider de Scrapy con proxies

# spider.py import scrapy class ProductSpider(scrapy.Spider): name = 'products' start_urls = ['https://example.com/products'] custom_settings = { 'ROTATING_PROXY_LIST': [ 'http://user1:pass1@gate.proxycove.com:8080', 'http://user2:pass2@gate.proxycove.com:8080', ], 'DOWNLOADER_MIDDLEWARES': { 'rotating_proxies.middlewares.RotatingProxyMiddleware': 610, 'rotating_proxies.middlewares.BanDetectionMiddleware': 620, }, 'DOWNLOAD_DELAY': 1, 'CONCURRENT_REQUESTS': 8, } def parse(self, response): for product in response.css('div.product'): yield { 'name': product.css('h2.title::text').get(), 'price': product.css('span.price::text').get(), 'url': response.urljoin(product.css('a::attr(href)').get()), } # Siguiente página next_page = response.css('a.next::attr(href)').get() if next_page: yield response.follow(next_page, self.parse)

✨ Mejores prácticas de web scraping 2025

El scraping exitoso en 2025 es una combinación de habilidades técnicas, herramientas adecuadas y un enfoque ético. Seguir las mejores prácticas aumenta la tasa de éxito del 30% al 90%+.

Reglas de oro del parsing

1. Respete robots.txt

El archivo robots.txt indica qué partes del sitio se pueden analizar. Cumplir estas reglas es señal de un scraper ético.

User-agent: *
Crawl-delay: 10
Disallow: /admin/
Disallow: /api/private/

✅ Cumpla con Crawl-delay y no analice rutas prohibidas

2. Añada retrasos

Una persona no realiza 100 solicitudes por segundo. Imite el comportamiento natural.

  • 0.5-2 seg entre solicitudes para sitios simples
  • 2-5 seg para sitios con protección
  • 5-10 seg para datos sensibles
  • Aleatorización de retrasos (¡no exactamente 1 seg!)

3. Rote User-Agent

El mismo User-Agent + muchas solicitudes = bandera roja para los sistemas anti-bot.

USER_AGENTS = [
  'Mozilla/5.0 (Windows NT 10.0) Chrome/120.0',
  'Mozilla/5.0 (Macintosh) Safari/17.0',
  'Mozilla/5.0 (X11; Linux) Firefox/121.0',
]

4. Maneje los errores

La red es inestable. Los proxies caen. Los sitios devuelven 503. Siempre use lógica de reintento (retry).

  • 3-5 intentos con retroceso exponencial
  • Registro de errores
  • Fallback a otro proxy si es baneado
  • Guardar el progreso

5. Use Sesiones

La sesión de Requests guarda cookies, reutiliza conexiones TCP (más rápido), gestiona encabezados.

session = requests.Session()
session.headers.update({...})

6. Almacene en caché los resultados

No analice lo mismo dos veces. Guarde el HTML en archivos o bases de datos para su posterior análisis sin nuevas solicitudes.

Simulación de comportamiento humano

Qué hacen los humanos vs. bots

Comportamiento Humano Bot (malo) Bot (bueno)
Velocidad de solicitudes 1-5 seg entre clics 100/seg 0.5-3 seg (aleatorio)
User-Agent Navegador real Python-requests/2.28 Chrome 120 (rotación)
Encabezados HTTP 15-20 encabezados 3-5 encabezados Conjunto completo
JavaScript Ejecuta siempre No ejecuta Navegador sin cabeza
Cookies Guarda Ignora Gestiona

🎯 Recomendaciones de encabezados

headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.9', 'Accept-Encoding': 'gzip, deflate, br', 'DNT': '1', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', 'Sec-Fetch-Dest': 'document', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-Site': 'none', 'Cache-Control': 'max-age=0', }

🛡️ Cómo evitar bloqueos

Los bloqueos son el principal problema en el scraping. En 2025, los sistemas de detección son tan inteligentes que requieren un enfoque integral para la evasión.

Estrategia de protección multinivel

⚠️ Señales que causan baneos

  • Reputación de IP — ASN de proxy conocido o IP de centro de datos
  • Rate limiting — demasiadas solicitudes demasiado rápido
  • Patrones de comportamiento — intervalos fijos entre solicitudes
  • Ausencia de ejecución de JS — no se ejecutan desafíos de navegador
  • Huella TLS — requests/curl tienen huellas únicas
  • Huella HTTP/2 — el orden de los encabezados delata la automatización
  • Huellas WebGL/Canvas — para navegadores sin cabeza

✅ Cómo evadir la detección

1. Use proxies de calidad

  • Residenciales/Móviles para sitios complejos
  • Pool grande de IPs (1000+ para rotación)
  • Geo-targeting por el país necesario
  • Sesiones persistentes para procesos de varios pasos

2. Navegadores sin cabeza con anti-detección

  • Puppeteer-extra-stealth — oculta las señales de headless
  • Playwright Stealth — análogo para Playwright
  • undetected-chromedriver — para Selenium Python
  • Aleatorización de huellas — WebGL, Canvas, Fuentes

3. Rotación inteligente y rate limiting

  • No más de 5-10 solicitudes/minuto por IP
  • Aleatorización de retrasos (no intervalos fijos)
  • Rotación adaptativa — cambiar IP al detectar rate limiting
  • Pausas nocturnas — simular el sueño del usuario

4. Conjunto completo de encabezados

  • 15-20 encabezados HTTP realistas
  • Cadena de Referer (de dónde vino)
  • Accept-Language según la geolocalización del proxy
  • Encabezados Sec-CH-UA para Chrome

💡 Pro-tip: Enfoque combinado

Para máxima eficiencia, combine: Proxies Residenciales + Puppeteer-stealth + Rotación inteligente + Encabezados completos + Retrasos de 2-5 seg. Esto da una tasa de éxito del 95%+ incluso en sitios complejos.

🇪🇺 GDPR y protección de datos

GDPR (Reglamento General de Protección de Datos) es la ley de protección de datos más estricta del mundo. Multas de hasta 20 millones de euros o el 4% de la facturación global.

Requisitos clave del GDPR para scraping

Base Legal

Se necesita una base legal para el procesamiento de datos personales:

  • Consentimiento — casi imposible de obtener para scraping
  • Interés legítimo — puede ser aplicable, pero requiere justificación
  • Obligación legal — para fines de cumplimiento

Minimización de Datos

Recopile solo los datos necesarios. No analice todo "por si acaso". Emails, teléfonos, direcciones — solo si son estrictamente necesarios.

Limitación de la Finalidad

Utilice los datos solo para el propósito declarado. Si lo analizó para estudio de mercado, no puede venderlo como base de emails.

Derecho al Olvido

Las personas pueden solicitar la eliminación de sus datos. Necesita un procedimiento para gestionar estas solicitudes.

🚨 Altos riesgos según el GDPR

  • Parsing de emails para spam — multa garantizada
  • Recopilación de datos biométricos (fotos faciales) — datos especialmente sensibles
  • Datos de menores — protección reforzada
  • Datos médicos — prohibido categóricamente sin bases especiales

💡 Recomendación: Si analiza datos de la UE, consulte a un abogado. GDPR no es broma. Para mayor seguridad, evite los datos personales y céntrese en hechos, precios y productos.

🎯 Casos de uso reales

💰

Monitoreo de precios de competidores

Tarea: Rastrear precios en Amazon/eBay para fijación de precios dinámica.

Solución: Proxies Residenciales de EE. UU. + Scrapy + MongoDB. Parsing de 10,000 productos 2 veces al día. Tasa de éxito 92%.

Proxy: Residenciales $200/mes

ROI: Aumento de ganancias del 15%

📊

Monitoreo SEO de posiciones

Tarea: Rastrear posiciones del sitio en Google para 1000 palabras clave en diferentes países.

Solución: Proxies Residenciales de 20 países + Python requests + PostgreSQL. Recopilación diaria de SERP.

Proxy: Residenciales $150/mes

Alternativa: API de servicios SEO ($500+/mes)

🤖

Recopilación de datos para modelos ML

Tarea: Recopilar 10 millones de artículos de noticias para entrenar un modelo NLP.

Solución: Proxies de Centro de Datos + Scrapy distribuido + Almacenamiento S3. Cumplimiento de robots.txt y retrasos.

Proxy: Centro de Datos $80/mes

Tiempo: 2 meses de recopilación

📱

Parsing de Instagram/TikTok

Tarea: Monitorear menciones de marca en redes sociales para análisis de marketing.

Solución: Proxies Móviles + Puppeteer-stealth + Cola Redis. Sesiones persistentes de 10 minutos por IP.

Proxy: Móviles $300/mes

Tasa de éxito: 96%

🏠

Agregador inmobiliario

Tarea: Recopilar anuncios de 50 sitios inmobiliarios para comparación.

Solución: Mix de proxies de Centro de Datos + Residenciales + Scrapy + Elasticsearch. Actualización cada 6 horas.

Proxy: Mixto $120/mes

Volumen: 500K anuncios/día

📈

Datos financieros

Tarea: Parsing de cotizaciones bursátiles, noticias para un algoritmo de trading.

Solución: Proxies Residenciales Premium + Python asyncio + TimescaleDB. Actualización en tiempo real.

Proxy: Premium $400/mes

Latencia: <100ms crítico

📊 Monitoreo y analítica

Métricas clave de parsing

95%+

Tasa de Éxito

Respuestas HTTP 200

<5%

Tasa de Bloqueo

Respuestas 403/429

2-3s

Tiempo de Respuesta Promedio

Latencia del proxy

$0.05

Coste por 1K Páginas

Coste del proxy

Herramientas de monitoreo

  • Prometheus + Grafana — métricas en tiempo real
  • Stack ELK — registro y análisis de logs
  • Sentry — seguimiento de errores
  • Dashboard personalizado — éxito, estado del proxy, costes

🔧 Solución de problemas típicos

Errores comunes y soluciones

❌ HTTP 403 Forbidden

Causa: IP bloqueada o detectada como proxy

Solución: Cambie a proxy residencial/móvil, añada encabezados realistas, use navegador sin cabeza

❌ HTTP 429 Too Many Requests

Causa: Se superó el límite de tasa

Solución: Aumente los retrasos (3-5 seg), rote proxies más a menudo, reduzca las solicitudes concurrentes

❌ CAPTCHA en cada solicitud

Causa: El sitio detecta automatización

Solución: Puppeteer-stealth, proxies móviles, sesiones persistentes, más retrasos

❌ Contenido vacío / JS no se carga

Causa: El sitio utiliza renderizado dinámico

Solución: Use Selenium/Puppeteer en lugar de requests, espere a que JS se cargue

❌ Velocidad de parsing lenta

Causa: Solicitudes secuenciales

Solución: Asincronía (asyncio, aiohttp), solicitudes concurrentes, más proxies

🚀 Técnicas avanzadas de parsing

Para desarrolladores experimentados

1. Enmascaramiento de Huellas HTTP/2

Los sistemas anti-bot modernos analizan el orden de los frame y encabezados HTTP/2. Bibliotecas como curl-impersonate imitan navegadores específicos a nivel TLS/HTTP.

# Uso de curl-impersonate para imitar perfectamente Chrome curl_chrome116 --proxy http://user:pass@gate.proxycove.com:8080 https://example.com

2. Algoritmos de Rotación de Proxies Inteligentes

No solo rotación aleatoria, sino algoritmos inteligentes:

  • Menos Usado Recientemente (LRU): usamos proxies que no se han usado en mucho tiempo
  • Ponderado por Tasa de Éxito: usamos más frecuentemente los proxies con mayor tasa de éxito
  • Agrupación Geográfica: agrupamos solicitudes al mismo sitio a través de proxies del mismo país
  • Limitación Adaptativa: reducimos la velocidad automáticamente al detectar rate limiting

3. Captura y resolución de CAPTCHA

Cuando las CAPTCHA son inevitables, utilice:

  • API de 2Captcha: resolución a través de personas reales ($0.5-3 por 1000 captchas)
  • hCaptcha-solver: soluciones de IA para captchas simples
  • CAPTCHA de Audio: reconocimiento mediante speech-to-text
  • reCAPTCHA v3: más difícil de evadir, requiere residenciales + stealth

4. Arquitectura de Scraping Distribuida

Para proyectos a gran escala (1M+ páginas/día):

  • Patrón Master-Worker: cola central de tareas (Redis, RabbitMQ)
  • Pods de Kubernetes: escalado horizontal de scrapers
  • Bases de datos distribuidas: Cassandra, MongoDB para almacenamiento
  • Colas de mensajes: procesamiento asíncrono de resultados
  • Stack de monitoreo: Prometheus + Grafana para métricas

💎 Nivel Empresarial: Gestión de proxies

Para equipos grandes y proyectos grandes, implemente:

  • Pool de proxies centralizado: gestión unificada para todos los proyectos
  • Verificación de estado (Health checking): verificación automática de la operatividad de los proxies
  • Detección de baneos: modelos de ML para identificar IPs baneadas
  • Seguimiento de costes: contabilidad de gastos por proyecto y equipo
  • API Gateway: API interna para obtener proxies

🎯 Conclusiones y recomendaciones

📝 Recomendaciones finales 2025

1. Selección de proxy

Sitios simples: Proxies de Centro de Datos ($1.5/GB)
E-commerce, SEO: Proxies Residenciales ($2.7/GB)
Redes sociales, bancos: Proxies Móviles ($3.8/GB)
Combinación: 80% datacenter + 20% residencial para optimizar costes

2. Herramientas

Python requests: para APIs y páginas simples
Scrapy: para scraping a gran escala (1M+ páginas)
Puppeteer/Selenium: para sitios pesados en JS
Plugins Stealth: obligatorios para evadir la detección

3. Estrategia de rotación

Rotativo: para muestreo masivo de datos
Persistente (Sticky): para trabajar con cuentas y formularios
Retrasos: 2-5 seg aleatorizados
Límite de tasa: máximo 10 solicitudes/min por IP

4. Legalidad

• Analice solo datos públicos
• Cumpla con robots.txt
• Evite datos personales (riesgos GDPR)
• Consulte a un abogado para proyectos comerciales

5. ProxyCove — La elección ideal

• Todos los tipos de proxy: Móvil, Residencial, Centro de Datos
• Ambos modos: Rotativo y Sesiones Persistentes
• Geo-targeting en 195+ países
• Pago por uso sin cuota mensual
• Soporte técnico 24/7 en español

🏆 Ventajas de ProxyCove para scraping

🌍

195+ países

Cobertura global

99.9% Uptime

Estabilidad

🔄

Rotación Auto

Rotación integrada

👨‍💼

Soporte 24/7

Siempre disponible

💰

Pago por uso

Sin cuota mensual

🔐

Auth IP/Login

Autenticación flexible

¡Comience a hacer scraping con ProxyCove!

Regístrese en 2 minutos, deposite fondos con el código promocional ARTHELLO y obtenga un bono de +$1.3. ¡Sin cuota mensual, pague solo por el tráfico!

Proxies para web scraping — mejores precios 2025:

🎁 ¡Use el código promocional ARTHELLO al depositar por primera vez y reciba $1.3 adicionales en su cuenta!

Continuación en la parte 2: Rotación de direcciones IP, configuración de proxies en Python (requests, Scrapy), Puppeteer y Selenium, ejemplos de código prácticos para tareas reales con ProxyCove.

En esta parte: Analizaremos estrategias de rotación de direcciones IP (rotativas vs. sesiones persistentes), aprenderemos a configurar proxies en Python (requests, Scrapy), Puppeteer y Selenium. Ejemplos de código prácticos para tareas reales de scraping con ProxyCove.

🔄 Estrategias de rotación de direcciones IP

La rotación de proxies es una técnica clave para un scraping exitoso. Una estrategia de rotación adecuada puede aumentar la tasa de éxito del 20% al 95%. En 2025 existen varios enfoques probados.

Estrategias principales

1. Rotación por cada solicitud

Cada solicitud HTTP utiliza una nueva IP. Máximo anonimato, pero puede causar problemas con las sesiones.

Adecuado para:

  • Parsing de listas de productos
  • Recopilación de páginas estáticas
  • Verificación masiva de URLs
  • Scraping de SERP de Google

2. Sesiones Persistentes (Sticky Sessions)

Una IP se utiliza para toda la sesión de usuario (10-30 minutos). Imita el comportamiento de un usuario real.

Adecuado para:

  • Procesos de varios pasos (login → datos)
  • Rellenar formularios
  • Gestión de cuentas
  • Carritos de E-commerce

3. Rotación basada en tiempo

Cambio de IP cada N minutos o después de N solicitudes. Equilibrio entre estabilidad y anonimato.

Adecuado para:

  • Sesiones de parsing largas
  • Llamadas a API con rate limit
  • Monitoreo en tiempo real

4. Rotación inteligente (Impulsada por IA)

El algoritmo decide cuándo cambiar la IP basándose en las respuestas del servidor (429, 403) y los patrones de éxito.

Adecuado para:

  • Sistemas anti-bot complejos
  • Parsing adaptativo
  • Alta eficiencia

💡 Recomendaciones de selección

  • Para alta velocidad: Rotación por cada solicitud + gran pool de proxies
  • Para sitios complejos: Sesiones persistentes + simulación de comportamiento
  • Para APIs: Rotación por tiempo respetando los límites de tasa
  • Para redes sociales: Sesiones persistentes + proxies móviles (mínimo 10 min por IP)

⚖️ Sesiones Rotativas vs. Sesiones Persistentes

Comparación detallada

Criterio Proxies Rotativos Sesiones Persistentes
Cambio de IP Cada solicitud o por temporizador 10-30 minutos por IP
Guardar cookies ❌ No ✅ Sí
Velocidad de parsing Muy alta Media
Evasión de rate limiting Excelente Pobre
Procesos de varios pasos No apto Ideal
Consumo de proxy Eficiente Medio
Detectabilidad Baja Baja
Precio por el mismo volumen Menor Mayor (retención más larga)

🎯 Veredicto: Utilice proxies rotativos para el parsing masivo de datos estáticos. Utilice sesiones persistentes para trabajar con cuentas, formularios y procesos de varios pasos. ¡ProxyCove soporta ambos modos!

🐍 Configuración de proxies en Python Requests

Python Requests es la biblioteca más popular para peticiones HTTP. Configurar un proxy toma literalmente 2 líneas de código.

Configuración básica

Ejemplo más simple

import requests # Proxy de ProxyCove (reemplace con sus datos) proxy = { "http": "http://username:password@gate.proxycove.com:8080", "https": "http://username:password@gate.proxycove.com:8080" } # Realizar la solicitud a través del proxy response = requests.get("https://httpbin.org/ip", proxies=proxy) print(response.json()) # Verá la IP del servidor proxy

✅ Reemplace username:password con sus credenciales de ProxyCove

Rotación de proxies desde una lista

import requests import random # Lista de proxies de ProxyCove (u otros proveedores) proxies_list = [ "http://user1:pass1@gate.proxycove.com:8080", "http://user2:pass2@gate.proxycove.com:8080", "http://user3:pass3@gate.proxycove.com:8080", ] def get_random_proxy(): proxy_url = random.choice(proxies_list) return {"http": proxy_url, "https": proxy_url} # Parsear 100 páginas con rotación urls = [f"https://example.com/page/{i}" for i in range(1, 101)] for url in urls: proxy = get_random_proxy() try: response = requests.get(url, proxies=proxy, timeout=10) print(f"✅ {url}: {response.status_code}") except Exception as e: print(f"❌ {url}: {str(e)}")

Manejo de errores y reintentos (retry)

import requests from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry # Configuración de la estrategia de reintento retry_strategy = Retry( total=3, # 3 intentos backoff_factor=1, # Retraso entre intentos status_forcelist=[429, 500, 502, 503, 504], ) adapter = HTTPAdapter(max_retries=retry_strategy) session = requests.Session() session.mount("http://", adapter) session.mount("https://", adapter) # Proxy proxy = { "http": "http://username:password@gate.proxycove.com:8080", "https": "http://username:password@gate.proxycove.com:8080" } # Solicitud con reintento automático response = session.get( "https://example.com", proxies=proxy, timeout=15 )

🕷️ Configuración de Scrapy con proxies

Scrapy es un framework potente para el scraping a gran escala. Soporta middleware para la rotación automática de proxies.

Método 1: Configuración básica

settings.py

# settings.py # Usamos una variable de entorno para el proxy import os http_proxy = os.getenv('HTTP_PROXY', 'http://user:pass@gate.proxycove.com:8080') # Scrapy usa automáticamente la variable http_proxy DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110, } # Configuración adicional para mejor compatibilidad CONCURRENT_REQUESTS = 16 # Solicitudes paralelas DOWNLOAD_DELAY = 0.5 # Retraso entre solicitudes (segundos) RANDOMIZE_DOWNLOAD_DELAY = True # Aleatorización del retraso

Método 2: Middleware personalizado con rotación

# middlewares.py import random from scrapy import signals class ProxyRotationMiddleware: def __init__(self): self.proxies = [ 'http://user1:pass1@gate.proxycove.com:8080', 'http://user2:pass2@gate.proxycove.com:8080', 'http://user3:pass3@gate.proxycove.com:8080', ] def process_request(self, request, spider): # Elegimos un proxy aleatorio para cada solicitud proxy = random.choice(self.proxies) request.meta['proxy'] = proxy spider.logger.info(f'Usando proxy: {proxy}') # settings.py DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.ProxyRotationMiddleware': 100, 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110, }

Método 3: scrapy-rotating-proxies (Recomendado)

# Instalación pip install scrapy-rotating-proxies # settings.py ROTATING_PROXY_LIST = [ 'http://user1:pass1@gate.proxycove.com:8080', 'http://user2:pass2@gate.proxycove.com:8080', 'http://user3:pass3@gate.proxycove.com:8080', ] DOWNLOADER_MIDDLEWARES = { 'rotating_proxies.middlewares.RotatingProxyMiddleware': 610, 'rotating_proxies.middlewares.BanDetectionMiddleware': 620, } # Configuración para detectar baneos ROTATING_PROXY_BAN_POLICY = 'rotating_proxies.policy.BanDetectionPolicy' ROTATING_PROXY_PAGE_RETRY_TIMES = 5

✅ Rastrea automáticamente los proxies que funcionan y excluye los baneados

🎭 Puppeteer y proxies

Puppeteer es Chrome sin cabeza para sitios pesados en JavaScript. Necesario para evadir desafíos JS (Cloudflare, DataDome).

Node.js + Puppeteer

Ejemplo básico

const puppeteer = require('puppeteer'); (async () => { // Configuración del proxy de ProxyCove const browser = await puppeteer.launch({ headless: true, args: [ '--proxy-server=gate.proxycove.com:8080', '--no-sandbox', '--disable-setuid-sandbox' ] }); const page = await browser.newPage(); // Autenticación (si el proxy requiere usuario/contraseña) await page.authenticate({ username: 'your_username', password: 'your_password' }); // Parsear la página await page.goto('https://example.com'); const content = await page.content(); console.log(content); await browser.close(); })();

Rotación de proxies en Puppeteer

const puppeteer = require('puppeteer'); const proxies = [ { server: 'gate1.proxycove.com:8080', username: 'user1', password: 'pass1' }, { server: 'gate2.proxycove.com:8080', username: 'user2', password: 'pass2' }, { server: 'gate3.proxycove.com:8080', username: 'user3', password: 'pass3' } ]; async function scrapeWithProxy(url, proxyConfig) { const browser = await puppeteer.launch({ headless: true, args: [`--proxy-server=${proxyConfig.server}`] }); const page = await browser.newPage(); await page.authenticate({ username: proxyConfig.username, password: proxyConfig.password }); await page.goto(url, { waitUntil: 'networkidle2' }); const data = await page.evaluate(() => document.body.innerText); await browser.close(); return data; } // Usamos diferentes proxies para diferentes páginas (async () => { const urls = ['https://example.com/page1', 'https://example.com/page2']; for (let i = 0; i < urls.length; i++) { const proxy = proxies[i % proxies.length]; // Rotación const data = await scrapeWithProxy(urls[i], proxy); console.log(`Página ${i + 1}:`, data.substring(0, 100)); } })();

puppeteer-extra con plugins

// npm install puppeteer-extra puppeteer-extra-plugin-stealth const puppeteer = require('puppeteer-extra'); const StealthPlugin = require('puppeteer-extra-plugin-stealth'); // El plugin oculta las señales de navegador sin cabeza puppeteer.use(StealthPlugin()); (async () => { const browser = await puppeteer.launch({ headless: true, args: ['--proxy-server=gate.proxycove.com:8080'] }); const page = await browser.newPage(); await page.authenticate({ username: 'user', password: 'pass' }); // ¡Ahora los sitios no detectarán que es un bot! await page.goto('https://example.com'); await browser.close(); })();

✅ El plugin Stealth oculta las huellas de webdriver, objetos de chrome y otras señales de automatización

🤖 Selenium con proxies (Python)

Selenium es una herramienta clásica para la automatización de navegadores. Soporta Chrome, Firefox y otros navegadores.

Chrome + Selenium

Configuración básica con proxy

from selenium import webdriver from selenium.webdriver.chrome.options import Options # Configuración de Chrome con proxy chrome_options = Options() chrome_options.add_argument('--headless') # Sin GUI chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') # Proxy de ProxyCove proxy = "gate.proxycove.com:8080" chrome_options.add_argument(f'--proxy-server={proxy}') # Crear el driver driver = webdriver.Chrome(options=chrome_options) # Parsear la página driver.get('https://httpbin.org/ip') print(driver.page_source) driver.quit()

Proxy con autenticación (selenium-wire)

# pip install selenium-wire from seleniumwire import webdriver from selenium.webdriver.chrome.options import Options # Configuración del proxy con usuario/contraseña seleniumwire_options = { 'proxy': { 'http': 'http://username:password@gate.proxycove.com:8080', 'https': 'http://username:password@gate.proxycove.com:8080', 'no_proxy': 'localhost,127.0.0.1' } } chrome_options = Options() chrome_options.add_argument('--headless') # Driver con proxy autenticado driver = webdriver.Chrome( options=chrome_options, seleniumwire_options=seleniumwire_options ) driver.get('https://example.com') print(driver.title) driver.quit()

✅ selenium-wire soporta proxies con username:password (Selenium estándar no lo soporta)

Rotación de proxies en Selenium

from seleniumwire import webdriver from selenium.webdriver.chrome.options import Options import random # Lista de proxies proxies = [ 'http://user1:pass1@gate.proxycove.com:8080', 'http://user2:pass2@gate.proxycove.com:8080', 'http://user3:pass3@gate.proxycove.com:8080', ] def create_driver_with_proxy(proxy_url): seleniumwire_options = { 'proxy': { 'http': proxy_url, 'https': proxy_url, } } chrome_options = Options() chrome_options.add_argument('--headless') # Driver con proxy driver = webdriver.Chrome( options=chrome_options, seleniumwire_options=seleniumwire_options ) return driver # Parsear varias páginas con diferentes proxies urls = ['https://example.com/1', 'https://example.com/2', 'https://example.com/3'] for url in urls: proxy = random.choice(proxies) driver = create_driver_with_proxy(proxy) try: driver.get(url) print(f"✅ {url}: {driver.title}") except Exception as e: print(f"❌ {url}: {str(e)}") finally: driver.quit()

📚 Bibliotecas para rotación de proxies

scrapy-rotating-proxies

Rotación automática para Scrapy con detección de baneos.

pip install scrapy-rotating-proxies

requests-ip-rotator

Rotación a través de API Gateway de AWS (IPs gratuitas).

pip install requests-ip-rotator

proxy-requests

Wrapper para requests con rotación y verificación.

pip install proxy-requests

puppeteer-extra-plugin-proxy

Plugin para Puppeteer con rotación de proxies.

npm install puppeteer-extra-plugin-proxy

💻 Ejemplos de código completos

Ejemplo: Parsing de Amazon con rotación

import requests from bs4 import BeautifulSoup import random import time # Proxies de ProxyCove PROXIES = [ {"http": "http://user1:pass1@gate.proxycove.com:8080", "https": "http://user1:pass1@gate.proxycove.com:8080"}, {"http": "http://user2:pass2@gate.proxycove.com:8080", "https": "http://user2:pass2@gate.proxycove.com:8080"}, ] # User agents para rotación USER_AGENTS = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36', ] def scrape_amazon_product(asin): url = f"https://www.amazon.com/dp/{asin}" proxy = random.choice(PROXIES) headers = {'User-Agent': random.choice(USER_AGENTS)} try: response = requests.get(url, proxies=proxy, headers=headers, timeout=15) if response.status_code == 200: soup = BeautifulSoup(response.content, 'html.parser') # Parsear datos title = soup.find('span', {'id': 'productTitle'}) price = soup.find('span', {'class': 'a-price-whole'}) return { 'asin': asin, 'title': title.text.strip() if title else 'N/A', 'price': price.text.strip() if price else 'N/A', } except Exception as e: print(f"Error para {asin}: {str(e)}") return None # Parsear lista de productos asins = ['B08N5WRWNW', 'B07XJ8C8F5', 'B09G9FPHY6'] for asin in asins: product = scrape_amazon_product(asin) if product: print(f"✅ {product['title']}: {product['price']}") time.sleep(random.uniform(2, 5)) # Retraso similar al humano

Ejemplo: Spider de Scrapy con proxies

# spider.py import scrapy class ProductSpider(scrapy.Spider): name = 'products' start_urls = ['https://example.com/products'] custom_settings = { 'ROTATING_PROXY_LIST': [ 'http://user1:pass1@gate.proxycove.com:8080', 'http://user2:pass2@gate.proxycove.com:8080', ], 'DOWNLOADER_MIDDLEWARES': { 'rotating_proxies.middlewares.RotatingProxyMiddleware': 610, 'rotating_proxies.middlewares.BanDetectionMiddleware': 620, }, 'DOWNLOAD_DELAY': 1, 'CONCURRENT_REQUESTS': 8, } def parse(self, response): for product in response.css('div.product'): yield { 'name': product.css('h2.title::text').get(), 'price': product.css('span.price::text').get(), 'url': response.urljoin(product.css('a::attr(href)').get()), } # Siguiente página next_page = response.css('a.next::attr(href)').get() if next_page: yield response.follow(next_page, self.parse)

¿Listo para comenzar a hacer scraping con ProxyCove?

Proxies Residenciales, Móviles y de Centro de Datos para cualquier tarea. ¡Deposite fondos con el código promocional ARTHELLO y obtenga un bono de +$1.3!

Continuación en la parte final: Mejores prácticas de web scraping, estrategias para evitar baneos, aspectos legales del parsing, casos de uso reales y conclusiones finales.

En la parte final: Analizaremos las mejores prácticas de web scraping 2025, estrategias para evitar baneos, aspectos legales del parsing (GDPR, CCPA), casos de uso reales y recomendaciones finales para un scraping exitoso.

✨ Mejores prácticas de web scraping 2025

El scraping exitoso en 2025 es una combinación de habilidades técnicas, herramientas adecuadas y un enfoque ético. Seguir las mejores prácticas aumenta la tasa de éxito del 30% al 90%+.

Reglas de oro del parsing

1. Respete robots.txt

El archivo robots.txt indica qué partes del sitio se pueden analizar. Cumplir estas reglas es señal de un scraper ético.

User-agent: *
Crawl-delay: 10
Disallow: /admin/
Disallow: /api/private/

✅ Cumpla con Crawl-delay y no analice rutas prohibidas