El scraping de características de productos de marketplaces es una tarea críticamente importante para vendedores, analistas y agregadores de precios. Wildberries, Ozon, Yandex.Market y otras plataformas bloquean activamente la recopilación automática de datos utilizando sistemas antibot avanzados. Sin proxies configurados correctamente, su scraper será bloqueado después de 50-100 solicitudes. En este artículo, analizaremos qué tipos de proxies son adecuados para el scraping, cómo configurar la rotación de IP y eludir la protección de los principales marketplaces.
Por qué los marketplaces bloquean el scraping y cómo funciona
Los marketplaces modernos pierden millones de rublos debido al scraping: los competidores copian descripciones de productos, los agregadores interceptan tráfico y la carga en los servidores aumenta. Por lo tanto, Wildberries, Ozon, Yandex.Market y otras plataformas han implementado una protección de múltiples niveles contra la recopilación automática de datos.
Cómo los marketplaces detectan el scraping:
- Frecuencia de solicitudes desde una IP — si desde una dirección llegan más de 100 solicitudes por minuto, es una clara señal de un bot. Un usuario normal revisa de 5 a 10 tarjetas de productos en ese tiempo.
- Ausencia de JavaScript — los scrapers simples en requests o curl no ejecutan el código JS que carga precios y características. El sitio ve que el contenido se solicita sin renderizado.
- User-Agent y encabezados — los encabezados por defecto de las bibliotecas (por ejemplo, "python-requests/2.28.0") revelan instantáneamente al bot. La ausencia de encabezados Accept-Language, Referer también es sospechosa.
- Huella digital del navegador — sistemas avanzados (Cloudflare, Kasada, DataDome) analizan Canvas, WebGL, fuentes, extensiones del navegador. Los navegadores sin cabeza como Puppeteer se identifican fácilmente por la falta de algunos parámetros.
- Patrones de comportamiento — el bot abre tarjetas de productos con un intervalo constante (por ejemplo, exactamente cada 2 segundos), no desplaza la página, no mueve el ratón. Esto lo diferencia de un ser humano vivo.
Consecuencias del bloqueo: Ban temporal de IP de 1 a 24 horas, CAPTCHA en cada solicitud, bloqueo total del rango de IP del centro de datos. Para los negocios, esto significa detener la recopilación de datos y perder la ventaja competitiva.
Caso real: Un agregador de precios estaba scrapeando Wildberries con 10 IP de un centro de datos, haciendo 500 solicitudes por hora desde cada una. Después de 3 días, todo el rango /24 recibió un ban permanente — tuvo que cambiar de proveedor de proxies y pasar a IP residenciales con rotación.
Comparación de tipos de proxies para el scraping de productos
Para el scraping de características de productos se utilizan tres tipos principales de proxies. Cada uno tiene sus ventajas y limitaciones dependiendo del volumen de datos, presupuesto y requisitos de velocidad.
| Tipo de proxy | Velocidad | Riesgo de ban | Costo | Cuándo usar |
|---|---|---|---|---|
| Proxies de centros de datos | Alta (50-200 ms) | Alto | Bajo | Scraping de pequeños volúmenes (hasta 10,000 productos/día), prueba del scraper |
| Proxies residenciales | Media (200-800 ms) | Bajo | Alto (por tráfico) | Scraping de Wildberries, Ozon con protección antibot, grandes volúmenes de datos |
| Proxies móviles | Media (300-1000 ms) | Muy bajo | Muy alto | Scraping con máxima protección, elusión de bloqueos severos, proyectos críticos |
Proxies de centros de datos — son direcciones IP de servidores en centros de datos (AWS, Hetzner, OVH). Son rápidos y baratos, pero los marketplaces los identifican fácilmente por las bases de ASN. Son adecuados para el scraping de catálogos pequeños (hasta 10,000 productos al día) o plataformas sin protección seria. Costo: desde 1-3$ por IP al mes.
Proxies residenciales — son IP de usuarios domésticos, obtenidas legalmente a través de SDK en aplicaciones. Los marketplaces los perciben como compradores normales. Son ideales para el scraping de Wildberries, Ozon, Yandex.Market en grandes volúmenes. Costo: desde 5-15$ por 1 GB de tráfico (aproximadamente 10,000-30,000 solicitudes).
Proxies móviles — IP de operadores móviles (MTS, Beeline, Megafon). Son el tipo más confiable para eludir la protección, pero caros y lentos. Úselos solo para tareas críticas donde el bloqueo no es aceptable. Costo: desde 50-150$ por IP al mes con rotación.
Proxies residenciales o de centros de datos: qué elegir para su tarea
La elección del tipo de proxy depende de tres factores: volumen de scraping, nivel de protección de la plataforma y presupuesto. Vamos a analizar escenarios específicos de uso.
Cuándo son adecuados los proxies de centros de datos
Escenario 1: Prueba del scraper
Está desarrollando un nuevo scraper y verificando la lógica de extracción de datos. Necesita scrapear de 100 a 500 productos para depuración. En este caso, los proxies residenciales son un gasto excesivo. Tome de 5 a 10 IP de un centro de datos y haga de 50 a 100 solicitudes desde cada uno por hora. Esto será suficiente para pruebas sin bloqueos.
Escenario 2: Scraping de plataformas sin protección
Pequeños marketplaces regionales, tablones de anuncios como Avito (en algunas categorías), tiendas en línea en OpenCart a menudo no tienen un sistema antibot serio. Aquí, los centros de datos funcionan de manera estable bajo una carga moderada (hasta 200 solicitudes por hora desde una IP).
Escenario 3: Presupuesto limitado y pequeños volúmenes
Si necesita scrapear de 5,000 a 10,000 productos al día y el presupuesto es limitado, pruebe los centros de datos con rotación agresiva (cambio de IP cada 50-100 solicitudes). Sí, habrá más bloqueos, pero con la configuración correcta de la lógica de reintento (repetir la solicitud con una nueva IP) esto funciona.
Cuándo se necesitan proxies residenciales
Escenario 1: Scraping de Wildberries y Ozon
Estas plataformas utilizan Cloudflare, DataDome y sus propios sistemas antibot. Desde los centros de datos recibirá CAPTCHA o un ban después de 20-50 solicitudes. Los proxies residenciales con rotación cada 5-10 minutos permiten scrapear cientos de miles de productos sin problemas. Un cliente scrapeó todo el catálogo de Wildberries (más de 20 millones de productos) en una semana, utilizando un grupo de 1,000 IP residenciales.
Escenario 2: Scraping con autorización
Algunas características de los productos (precios al por mayor, existencias en almacenes) solo están disponibles para usuarios autorizados. Si está scrapeando a través de una cuenta, usar centros de datos resultará en el bloqueo de la cuenta. Los proxies residenciales imitan las acciones de un usuario real, reduciendo el riesgo de ban.
Escenario 3: Geotargeting
Los precios y la disponibilidad de productos en Wildberries, Ozon, Yandex.Market dependen de la región del usuario. Para recopilar datos de Moscú, San Petersburgo, Ekaterimburgo simultáneamente, se necesitan proxies residenciales con selección de ciudad. Los centros de datos no permiten controlar con precisión la geolocalización.
Fórmula para elegir el tipo de proxy:
- Volumen < 10,000 productos/día + sin protección severa = centros de datos
- Volumen > 10,000 productos/día + Wildberries/Ozon = residenciales
- Scraping con autorización + riesgo de ban de cuenta = residenciales
- Se necesita geotargeting por ciudades de Rusia = residenciales
- Proyecto crítico + cero tolerancia a bloqueos = móviles
Configuración de la rotación de IP: intervalos y estrategias
La rotación de IP es el cambio automático de proxy después de un número determinado de solicitudes o tiempo. La configuración correcta de la rotación es clave para un scraping estable sin bloqueos.
Tipos de rotación de proxies
1. Rotación por tiempo (Time-based rotation)
La IP cambia después de un intervalo fijo: 5 minutos, 10 minutos, 30 minutos. Este es el método más simple, pero no el más efectivo. Si hace 200 solicitudes en 5 minutos y el límite de la plataforma es de 100 solicitudes por IP, aún recibirá un ban.
Cuándo usar: Para proxies residenciales con baja carga (hasta 50 solicitudes por IP). Por ejemplo, el scraping de Wildberries con un intervalo de 3-5 segundos entre solicitudes — la rotación cada 10 minutos será óptima.
2. Rotación por número de solicitudes (Request-based rotation)
La IP cambia después de N solicitudes: 50, 100, 200. Esto es más preciso que la rotación temporal, pero requiere rastrear el contador de solicitudes en el código del scraper.
Cuándo usar: Para centros de datos y scraping agresivo. Por ejemplo, sabe que Ozon bloquea después de 80 solicitudes desde una IP — establezca la rotación cada 70 solicitudes como margen.
3. Rotación por cada solicitud (Per-request rotation)
Cada solicitud pasa por una nueva IP. Máxima protección contra bloqueos, pero la estrategia más cara para proxies residenciales (el consumo de tráfico aumenta debido a la creación de nuevas conexiones).
Cuándo usar: Para eludir las protecciones más severas (Cloudflare en modo "Under Attack"), scraping con alto riesgo de ban de cuenta, recopilación de datos de competidores que rastrean el scraping.
Intervalos de rotación recomendados para plataformas populares
| Plataforma | Tipo de proxy | Intervalo de rotación | Retraso entre solicitudes |
|---|---|---|---|
| Wildberries | Residenciales | Cada 5-10 minutos o 50 solicitudes | 2-4 segundos |
| Ozon | Residenciales | Cada 7-12 minutos o 60 solicitudes | 3-5 segundos |
| Yandex.Market | Residenciales | Cada 10-15 minutos o 80 solicitudes | 2-3 segundos |
| Avito (categoría productos) | Centros de datos | Cada 15-20 minutos o 100 solicitudes | 1-2 segundos |
| AliExpress | Residenciales | Cada 3-5 minutos o 30 solicitudes | 4-6 segundos |
Punto importante: Estas cifras son el resultado de pruebas en 2024. Los marketplaces actualizan constantemente su protección, por lo que se recomienda comenzar con configuraciones conservadoras (menos solicitudes, más retraso) y aumentar gradualmente la carga, monitoreando el porcentaje de bloqueos.
Estrategia de rotación "inteligente"
En lugar de intervalos fijos, utilice rotación adaptativa basada en las respuestas del servidor:
- HTTP 429 (Too Many Requests) — cambio inmediato de IP y adición de esta IP a la lista negra durante 30-60 minutos.
- HTTP 403 (Forbidden) o CAPTCHA — cambio de IP y aumento del retraso entre solicitudes en un 50%.
- HTTP 503 (Service Unavailable) — puede que el problema no esté en el proxy, sino en la sobrecarga del sitio. Pausa de 30-60 segundos sin cambio de IP.
- Solicitudes exitosas consecutivas > 100 — se puede reducir un poco el retraso o aumentar el número de solicitudes antes de la rotación.
Esta lógica se implementa en el código del scraper y permite ahorrar hasta un 30-40% del tráfico de proxies, evitando rotaciones innecesarias.
Elusión de sistemas antibot de Wildberries, Ozon y Yandex.Market
Los marketplaces modernos utilizan protección de múltiples niveles: desde una simple verificación de User-Agent hasta un fingerprinting avanzado del navegador. Solo los proxies no son suficientes — se necesita una estrategia integral de elusión.
Nivel 1: Encabezados HTTP correctos
El conjunto mínimo de encabezados que su scraper debe enviar:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: es-ES,es;q=0.9,en;q=0.8
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Cache-Control: max-age=0
Puntos críticos:
- El User-Agent debe coincidir con un navegador real. Utilice versiones actuales de Chrome 120+, Firefox 121+. No utilice versiones antiguas (Chrome 90) — esto es una señal de alerta.
- El Accept-Language debe ser "es-ES" para plataformas españolas. Si scrapea con el encabezado "en-US", el sitio entiende la discrepancia (IP de España, pero el idioma es inglés).
- Los encabezados Sec-Fetch-* aparecieron en Chrome 76+ y son obligatorios para sitios modernos. Su ausencia revela un scraper antiguo.
Nivel 2: Ejecución de JavaScript
Wildberries y Ozon cargan precios, características, existencias a través de JavaScript después de cargar la página. Si su scraper en requests/curl simplemente descarga HTML, obtendrá una página vacía o un marcador.
Solución: Utilice navegadores sin cabeza — Puppeteer (Node.js), Playwright (Python/Node.js), Selenium. Renderizan completamente la página, ejecutan JS y obtienen el HTML final.
Problema de los navegadores sin cabeza: Los sitios los identifican fácilmente por parámetros navigator.webdriver === true, ausencia de plugins, tamaños de Canvas específicos. El porcentaje de identificación de Chrome sin cabeza es de aproximadamente 80-90%.
Solución al problema: Utilice bibliotecas para modo sigiloso:
- puppeteer-extra-plugin-stealth (Node.js) — disfraza Puppeteer como un Chrome normal, parchea más de 30 parámetros de huella digital.
- undetected-chromedriver (Python) — versión parcheada de Selenium ChromeDriver que no es detectada por la mayoría de los sistemas antibot.
- playwright-stealth (Python) — análogo para Playwright con soporte para Firefox y WebKit.
Nivel 3: Elusión de Cloudflare y DataDome
Wildberries utiliza Cloudflare Bot Management, Ozon — DataDome. Estos sistemas analizan no solo IP y encabezados, sino también comportamiento: velocidad de desplazamiento, movimientos del ratón, tiempo de carga de la página.
Señales del desafío de Cloudflare: En lugar de contenido, ve una página "Checking your browser..." con un retraso de 5 segundos. En el código, esto es un desafío de JavaScript que verifica el navegador.
Cómo eludir:
- FlareSolverr — servicio proxy que resuelve el desafío de Cloudflare automáticamente. Le envía la URL, devuelve cookies para eludir. Funciona en el 70-80% de los casos.
- Playwright con espera — carga la página en un navegador sin cabeza, espera de 10 a 15 segundos (hasta que se ejecute el JS), extrae cookies y las utiliza en solicitudes HTTP normales. Ahorra recursos: el navegador solo se necesita para obtener cookies, luego scrapea a través de requests.
- Proxies residenciales + navegador sigiloso — la combinación da más del 95% de elusiones exitosas. Cloudflare ve la IP real del usuario y la huella digital correcta del navegador.
Importante: Cloudflare actualiza constantemente su protección. Lo que funcionó en diciembre de 2024 puede no funcionar en marzo de 2025. Siempre tenga un plan de respaldo: solución manual de CAPTCHA a través de servicios 2Captcha/AntiCaptcha o cambio a la API del marketplace (si está disponible).
Nivel 4: Imitación del comportamiento del usuario
Los sistemas antibot avanzados rastrean patrones de comportamiento. Un usuario real desplaza la página, mueve el ratón, a veces vuelve atrás. Un bot abre tarjetas de productos con un intervalo perfecto de 2.000 segundos.
Cómo imitar:
- Randomización de retrasos — en lugar de 3 segundos fijos, use random.uniform(2.5, 5.0). Agregue pausas largas raras (15-30 segundos), simulando la distracción del usuario.
- Desplazamiento de la página — en Puppeteer/Playwright, agregue desplazamiento antes de extraer datos:
await page.evaluate(() => window.scrollBy(0, 500)). - Movimientos del ratón — la biblioteca ghost-cursor para Puppeteer genera trayectorias realistas de movimiento del cursor.
- Navegaciones a través de búsqueda — no abra tarjetas de productos directamente por URL. Primero, vaya a la página principal, realice una búsqueda, haga clic en el producto en los resultados. Esto parece natural.
Herramientas populares para scraping con soporte de proxies
Para el scraping de características de productos no es necesario escribir código desde cero. Existen herramientas listas con interfaz visual, soporte de proxies y elusión automática de protección.
Octoparse — scraper sin código
Descripción: Aplicación de escritorio para Windows/Mac con un constructor visual de scrapers. Haces clic en los elementos de la página (nombre del producto, precio, características), el programa crea automáticamente las reglas de extracción.
Soporte de proxies: Integrado. En la configuración, especificas la lista de proxies, el programa los rota automáticamente. Soporta HTTP, HTTPS, SOCKS5. Hay integración con proveedores Bright Data, Smartproxy.
Ventajas: No se necesita código, funciona con sitios JavaScript, programador de tareas integrado, exportación a Excel/CSV/JSON.
Desventajas: Suscripción de pago desde 75$/mes, más lento que el código en Python, limitaciones en la cantidad de páginas en la versión gratuita.
Cuándo usar: Para proyectos pequeños (hasta 50,000 productos), si no eres programador o necesitas un prototipo rápido.
ParseHub — scraper en la nube
Descripción: Análogo de Octoparse, pero funciona en la nube. Configuras el scraper en la aplicación de escritorio, y se ejecuta en los servidores de ParseHub. Conveniente para tareas largas (scraping de más de 100,000 productos).
Soporte de proxies: Solo en tarifas de pago (desde 149$/mes). Puedes cargar tu propia lista de proxies o usar las IP residenciales integradas de ParseHub.
Ventajas: No carga tu computadora, procesamiento automático de paginación, API para integración.
Desventajas: Caro, soporte lento, dificultades en la configuración para sitios complejos.
Scrapy (Python) — para programadores
Descripción: Framework para crear scrapers en Python. La opción más flexible y rápida — se pueden scrapear millones de productos al día. Requiere conocimientos de Python a nivel intermedio.
Soporte de proxies: A través de middleware. Soluciones populares: scrapy-rotating-proxies (rotación de una lista), scrapy-proxy-pool (integración con API de proveedores). La configuración toma de 10 a 15 minutos.
Ventajas: Gratis, muy rápido (solicitudes asíncronas), control total sobre la lógica, enorme comunidad.
Desventajas: Necesita escribir código, dificultades con sitios JavaScript (requiere integración con Splash o Playwright).
Cuándo usar: Para proyectos serios con un volumen de 100,000+ productos al día, si tienes un programador en el equipo.
Apify — marketplace de scrapers listos
Descripción: Plataforma con miles de scrapers listos (llamados "actores") para sitios populares. Hay soluciones listas para Amazon, eBay, AliExpress. Para marketplaces rusos, la selección es menor, pero se puede encargar el desarrollo.
Soporte de proxies: Integrado en todos los actores. Apify proporciona sus propios proxies residenciales (pago por tráfico) o puedes conectar los tuyos.
Ventajas: Soluciones listas, ejecución en la nube, API para automatización, proxies integrados.
Desventajas: Caro (desde 49$/mes + pago por proxies), dependencia de la plataforma, limitaciones en la personalización.
Comparación de herramientas
| Herramienta | ¿Se necesita código? | Precio | Velocidad | Para quién |
|---|---|---|---|---|
| Octoparse | No | Desde 75$/mes | Media | Marketers, analistas sin programación |
| ParseHub | No | Desde 149$/mes | Media | Los mismos, que quieren ejecución en la nube |
| Scrapy | Sí (Python) | Gratis | Muy alta | Programadores, grandes volúmenes de datos |
| Apify | No (actores listos) | Desde 49$/mes + tráfico | Alta | Negocios, necesitan soluciones listas |
| Puppeteer/Playwright | Sí (JS/Python) | Gratis | Media (navegadores pesados) | Programadores, sitios JS complejos |
Configuración paso a paso de proxies en el scraper
Consideremos la configuración práctica de proxies usando herramientas populares. Estas instrucciones son adecuadas para el scraping de cualquier marketplace, no solo rusos.
Configuración en Octoparse
Paso 1: Abra Octoparse y cree una nueva tarea de scraping. Ingrese la URL de la página de inicio (por ejemplo, categoría de productos en Wildberries).
Paso 2: Vaya al menú "Settings" → "Advanced Settings" → "Proxy". Seleccione "Use custom proxy".
Paso 3: Agregue proxies en el formato:
http://username:password@proxy-server.com:8080
socks5://username:password@proxy-server.com:1080
Paso 4: Active la opción "Rotate proxy" y establezca el intervalo de rotación. Para Wildberries se recomienda "Rotate on every 50 requests" o "Rotate every 10 minutes".
Paso 5: Haga clic en "Test Proxy" — Octoparse verificará la disponibilidad de cada proxy. Elimine los que no funcionen de la lista.
Paso 6: En la sección "Speed" establezca el retraso entre solicitudes: 2-4 segundos para proxies residenciales, 3-5 segundos para centros de datos.
Configuración en Scrapy (Python)
Paso 1: Instale la biblioteca para rotación de proxies:
pip install scrapy-rotating-proxies
Paso 2: Cree un archivo proxies.txt con la lista de proxies (uno por línea):
http://user:pass@1.2.3.4:8080
http://user:pass@5.6.7.8:8080
socks5://user:pass@9.10.11.12:1080
Paso 3: En el archivo settings.py de su proyecto Scrapy, agregue:
ROTATING_PROXY_LIST_PATH = 'proxies.txt'
DOWNLOADER_MIDDLEWARES = {
'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}
# Retraso entre solicitudes (en segundos)
DOWNLOAD_DELAY = 3
# Randomización del retraso (±50%)
RANDOMIZE_DOWNLOAD_DELAY = True
# Solicitudes paralelas (no más de 16 para proxies residenciales)
CONCURRENT_REQUESTS = 8
Paso 4: Scrapy rotará automáticamente los proxies en cada solicitud. Si un proxy devuelve un error (HTTP 403, 429, tiempo de espera), se marca como "malo" y se excluye temporalmente de la rotación.
Configuración en Puppeteer (Node.js)
Paso 1: Instale Puppeteer y el plugin para modo sigiloso:
npm install puppeteer puppeteer-extra puppeteer-extra-plugin-stealth
Paso 2: Cree un script con soporte de proxies:
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
const proxyList = [
'http://user:pass@proxy1.com:8080',
'http://user:pass@proxy2.com:8080'
];
let currentProxyIndex = 0;
async function scrapeWithProxy(url) {
const proxy = proxyList[currentProxyIndex];
currentProxyIndex = (currentProxyIndex + 1) % proxyList.length;
const browser = await puppeteer.launch({
headless: true,
args: [`--proxy-server=${proxy}`]
});
const page = await browser.newPage();
// Autenticación del proxy (si es necesario)
await page.authenticate({
username: 'user',
password: 'pass'
});
await page.goto(url, { waitUntil: 'networkidle2' });
// Extracción de datos
const data = await page.evaluate(() => {
return {
title: document.querySelector('.product-title')?.innerText,
price: document.querySelector('.product-price')?.innerText,
// Agregue más campos según sea necesario
};
});
await browser.close();
return data;
}
Paso 3: Llama a la función scrapeWithProxy(url) con la URL del producto que deseas scrapear.