Volver al blog

Cómo evitar el bloqueo por solicitudes frecuentes a las API de Wildberries, Ozon y Avito

Analizamos las razones de los bloqueos de API en los marketplaces al extraer precios y existencias, y mostramos cómo configurar correctamente proxies, retrasos y encabezados para un funcionamiento estable sin prohibiciones.

📅30 de enero de 2026
```html

Si te dedicas a monitorear los precios de la competencia, hacer scraping de existencias de productos o publicar anuncios automáticamente en marketplaces, seguramente te has encontrado con bloqueos. La API de Wildberries, Ozon, Yandex.Market y Avito se protege activamente contra la automatización: limitan la cantidad de solicitudes, bloquean direcciones IP y requieren CAPTCHA. En esta guía, analizaremos por qué ocurren los bloqueos y cómo configurar el scraper para trabajar de manera estable durante meses sin baneos.

Por qué los marketplaces bloquean solicitudes frecuentes a la API

Los marketplaces gastan enormes cantidades de dinero en mantener la infraestructura: servidores, bases de datos, CDN. Cuando haces miles de solicitudes por minuto para hacer scraping de precios, generas una carga adicional en sus sistemas. Pero la principal razón de los bloqueos no es técnica, sino orientada al negocio.

Principales razones de los bloqueos:

  • Protección de datos competitivos. Wildberries y Ozon no quieren que los competidores obtengan fácilmente información sobre precios, existencias y productos populares. Estos datos son un secreto comercial.
  • Reducción de la carga en los servidores. Un scraper puede generar tantas solicitudes como 10,000 compradores normales. Esto aumenta los costos de hosting.
  • Lucha contra el fraude y el spam. Los sistemas automáticos se utilizan para inflar vistas, reseñas y publicar anuncios masivos en Avito.
  • Monetización de la API. Algunos marketplaces ofrecen APIs oficiales de pago con límites. Al bloquear el scraping gratuito, estimulan la compra de acceso.

Por ejemplo, si monitoreas precios de 5,000 productos cada hora, eso son 120,000 solicitudes al día. Desde una dirección IP, esto parece sospechoso, y el sistema de protección del marketplace bloqueará rápidamente tu acceso.

Qué métodos de protección utilizan Wildberries, Ozon y Avito

Los marketplaces modernos utilizan una protección de múltiples niveles contra el scraping. Comprender estos mecanismos ayudará a configurar correctamente la elusión de bloqueos.

Método de protección Cómo funciona Cómo eludir
Limitación de Tasa Límite de solicitudes desde una IP: 100-500 por hora Retrasos entre solicitudes + rotación de IP
Lista Negra de IP Bloqueo de proxies de centros de datos conocidos Uso de proxies residenciales
Verificación de User-Agent Bloqueo de solicitudes sin User-Agent de navegador Establecer encabezados realistas
Verificaciones de JavaScript Requiere la ejecución de código JS para obtener datos Uso de navegadores headless
Captcha Verificación forzada ante actividad sospechosa Reducir la frecuencia de solicitudes, servicios de resolución de captcha
Fingerprinting TLS Detección de automatización por parámetros TLS Uso de bibliotecas con fingerprint correcto
Análisis de comportamiento Análisis de patrones: velocidad de clics, movimientos del ratón Aleatorización de retrasos, simulación de comportamiento humano

Wildberries utiliza una protección agresiva: límite de alrededor de 200-300 solicitudes por hora desde una IP, verificación de User-Agent y desafíos de JavaScript. Si superas el límite, recibirás un HTTP 429 (Demasiadas Solicitudes) o 403 (Prohibido).

Ozon es más tolerante al scraping a través de la API, pero bloquea activamente las IP de centros de datos. Utilizan servicios de detección de tipo de IP (DataCenter vs Residential), por lo que los proxies normales a menudo no funcionan.

Avito protege la API contra la publicación masiva de anuncios y el scraping de contactos. Aquí la vinculación geográfica es importante: si publicas un anuncio en Kazán, la IP debe ser de Kazán, de lo contrario, la moderación bloqueará la publicación.

Limitación de tasa: cómo configurar correctamente los retrasos entre solicitudes

La limitación de tasa es una restricción artificial de la velocidad de solicitudes, para que tu actividad parezca la de un usuario normal. La regla principal: es mejor ir despacio pero de manera estable, que rápido y con baneo.

Ajustes recomendados para marketplaces populares:

Wildberries:

  • Retraso entre solicitudes: 2-5 segundos (aleatorizado)
  • Máximo 150-200 solicitudes por hora desde una IP
  • Pausa de 10-15 minutos después de cada 100 solicitudes
  • Rotación de IP después de 200 solicitudes

Ozon:

  • Retraso entre solicitudes: 1-3 segundos
  • Máximo 300-400 solicitudes por hora desde una IP
  • Uso de proxies residenciales es obligatorio
  • Rotación de IP después de 300 solicitudes

Avito:

  • Retraso entre solicitudes: 3-7 segundos
  • Máximo 50-100 solicitudes por hora (límites estrictos)
  • La IP debe corresponder a la ciudad del anuncio
  • Una IP = una cuenta (no mezcles)

Cómo implementar retrasos aleatorizados: No uses intervalos fijos como "exactamente 3 segundos" — esto parece un bot. Agrega aleatoriedad: de 2 a 5 segundos. La mayoría de los scrapers soportan esto a través de configuraciones.

Por ejemplo, en Python con la biblioteca requests, se vería así:

import time
import random
import requests

def make_request(url, proxies):
    response = requests.get(url, proxies=proxies)
    # Retraso aleatorio de 2 a 5 segundos
    delay = random.uniform(2.0, 5.0)
    time.sleep(delay)
    return response

# Ejemplo de uso
proxy = {
    'http': 'http://username:password@proxy.example.com:8000',
    'https': 'http://username:password@proxy.example.com:8000'
}

for product_id in product_list:
    url = f'https://card.wb.ru/cards/detail?nm={product_id}'
    response = make_request(url, proxy)
    # Procesamiento de datos...

Punto importante: Después de cada 100-200 solicitudes, haz una pausa larga (10-20 minutos) o cambia la IP. Esto simula el comportamiento de una persona que revisa productos y luego se distrae con otras cosas.

Rotación de proxies para distribuir la carga

Incluso con los retrasos correctos, una IP no soportará una carga prolongada. La solución es la rotación de proxies: distribuir solicitudes entre múltiples direcciones IP. Esta es la base para un scraping estable en marketplaces.

Tipos de proxies para hacer scraping en marketplaces:

Tipo de proxy Ventajas Desventajas Para qué tareas
Centros de datos Rápidos, baratos, estables Fácilmente detectables, a menudo en listas negras Yandex.Market, pequeños marketplaces
Residenciales IP reales de usuarios domésticos, bajo riesgo de baneo Más caros, más lentos que los de centros de datos Wildberries, Ozon, Avito
Móviles IP de operadores móviles, máxima anonimidad Los más caros, velocidad variable Eludir bloqueos estrictos de Avito

Para hacer scraping de Wildberries y Ozon, recomendamos usar proxies residenciales — tienen IP de usuarios domésticos reales, por lo que los marketplaces no pueden diferenciarlos de compradores normales. Los proxies de centros de datos funcionan mal aquí: Ozon y Wildberries mantienen listas negras de tales IP.

Estrategias de rotación de proxies:

  • Rotación después de N solicitudes. Cambia la IP después de cada 100-300 solicitudes. Este es el equilibrio óptimo entre eficiencia y seguridad.
  • Rotación por tiempo. Cambia la IP cada 30-60 minutos. Adecuado para sesiones largas de scraping.
  • Sesiones pegajosas. Usa una IP para todas las solicitudes a un producto/categoría, luego cambia. Esto reduce la sospecha.
  • Vinculación geográfica. Para Avito es obligatorio: haz scraping de anuncios de Moscú a través de IP de Moscú, de Kazán a través de IP de Kazán.

La mayoría de los proveedores de proxies residenciales ofrecen rotación automática: obtienes un endpoint, y la IP cambia automáticamente con una frecuencia establecida o después de cada solicitud. Esto simplifica la configuración del scraper.

Ejemplo de configuración de un pool de proxies en Python:

import requests
import random

# Lista de proxies (puede cargarse desde un archivo)
proxy_list = [
    'http://user:pass@proxy1.example.com:8000',
    'http://user:pass@proxy2.example.com:8000',
    'http://user:pass@proxy3.example.com:8000',
    # ... otras 50-100 proxies
]

def get_random_proxy():
    proxy = random.choice(proxy_list)
    return {
        'http': proxy,
        'https': proxy
    }

# Uso
for product_id in product_list:
    proxy = get_random_proxy()  # Proxy aleatorio para cada solicitud
    response = requests.get(url, proxies=proxy)
    # Procesamiento...

Configuración de encabezados y fingerprint para simular un navegador

Los marketplaces analizan no solo la IP y la frecuencia de solicitudes, sino también los encabezados HTTP. Si tu scraper envía solicitudes con los encabezados predeterminados de la biblioteca (por ejemplo, python-requests/2.28.0), será identificado instantáneamente como un bot.

Encabezados obligatorios para simular un navegador:

headers = {
    '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': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
    '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',
    'Referer': 'https://www.google.com/'
}

Puntos importantes:

  • El User-Agent debe corresponder a un navegador real. Usa versiones actuales de Chrome, Firefox, Safari. Cambia el User-Agent cada 100-200 solicitudes.
  • Accept-Language debe corresponder a la geografía del proxy. Si usas IP rusas, pon ru-RU; para ucranianas, uk-UA.
  • Referer indica de dónde vino el usuario. Para la primera solicitud, usa Google/Yandex; para las siguientes, páginas internas del marketplace.
  • Los encabezados Sec-Fetch-* añaden realismo. Los navegadores modernos los envían automáticamente.

Fingerprinting TLS: Los sistemas de protección avanzados (Ozon, Wildberries) analizan los parámetros de la conexión TLS: orden de cipher suites, extensiones, versión del protocolo. Las bibliotecas estándar de Python/Node.js tienen un fingerprint diferente al de los navegadores.

La solución es utilizar bibliotecas especializadas:

  • curl-impersonate (Python) — imita el fingerprint TLS de Chrome/Firefox
  • tls-client (Go, bindings de Python) — fingerprint TLS configurable
  • Playwright / Puppeteer — navegadores headless con verdadero TLS

Para la mayoría de las tareas de scraping en marketplaces, son suficientes los encabezados HTTP correctos y proxies residenciales. El fingerprinting TLS es crítico solo al trabajar con las APIs más protegidas.

API vs web scraping: qué es más seguro para hacer scraping

Los marketplaces tienen dos formas de obtener datos: API oficial y scraping de páginas HTML (web scraping). ¿Cuál elegir para un funcionamiento estable?

Parámetro API oficial Web scraping
Legalidad ✅ Permitido, hay documentación ⚠️ Zona gris, puede violar los Términos de Servicio
Estabilidad ✅ Estructura de datos estable ❌ Se rompe con el rediseño del sitio
Límites ⚠️ Límites oficiales estrictos ⚠️ No oficiales, pero hay protección
Acceso a datos ⚠️ No todos los datos están disponibles ✅ Todos los datos públicos
Velocidad ✅ Respuestas JSON rápidas ❌ Más lento debido al HTML
Costo ⚠️ A menudo de pago ✅ Gratis (solo proxies)

Recomendaciones para la elección:

  • Usa la API oficial si: Necesitas volúmenes pequeños de datos (hasta 10,000 productos al día), estás dispuesto a pagar por el acceso, la legalidad y la estabilidad son importantes.
  • Usa web scraping si: Necesitas grandes volúmenes de datos, la API oficial no proporciona la información necesaria (por ejemplo, precios de competidores), el presupuesto es limitado.

Enfoque híbrido: Muchos scrapers profesionales combinan ambos métodos. Por ejemplo, obtienen una lista de productos a través de la API (rápido y legal), y luego hacen scraping de información detallada sobre precios y existencias desde las páginas HTML (más datos).

APIs internas de los marketplaces: Además de la API oficial, los marketplaces utilizan APIs internas para el funcionamiento del sitio. Por ejemplo, Wildberries carga datos de productos a través de https://card.wb.ru/cards/detail. Estos endpoints no están documentados, pero funcionan más rápido que el scraping HTML. La desventaja es que pueden cambiar sin previo aviso.

Configuración de scrapers y herramientas populares

La mayoría de los vendedores y marketers utilizan herramientas listas para hacer scraping en marketplaces. Veamos cómo configurar correctamente proxies y límites en soluciones populares.

Configuración de Scrapy (framework de Python)

Scrapy es un framework popular para web scraping. Para trabajar con marketplaces, añade a settings.py:

# Retrasos entre solicitudes
DOWNLOAD_DELAY = 3  # 3 segundos
RANDOMIZE_DOWNLOAD_DELAY = True  # Aleatorización de 0.5*DELAY a 1.5*DELAY

# Límites de solicitudes simultáneas
CONCURRENT_REQUESTS = 8
CONCURRENT_REQUESTS_PER_DOMAIN = 2

# Configuración de proxies (a través de middleware rotating-proxies)
ROTATING_PROXY_LIST = [
    'http://user:pass@proxy1.example.com:8000',
    'http://user:pass@proxy2.example.com:8000',
    # ... lista de proxies
]

# Rotación de User-Agent
USER_AGENT_LIST = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Safari/537.36',
    # ... lista de User-Agent
]

# Reintentos ante errores
RETRY_TIMES = 3
RETRY_HTTP_CODES = [429, 500, 502, 503, 504]

Configuración de Octoparse (parser visual sin código)

Octoparse es una herramienta popular para hacer scraping sin programación. Configuración de proxies y límites:

  1. Abre Task Settings → Advanced Options
  2. En la sección "Network" activa "Use Proxy Server"
  3. Añade la lista de proxies en el formato IP:PORT:USER:PASS
  4. Activa "Rotate IP for each request" para rotación automática
  5. En la sección "Speed" establece "Slow" o "Custom" con un retraso de 3-5 segundos
  6. Activa "Random delay" para simular el comportamiento humano

Configuración de Selenium (automatización del navegador)

Selenium controla un navegador real, por lo que elude muchas protecciones. Ejemplo de configuración con proxies:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import random

# Configuración de Chrome con proxy
chrome_options = Options()
chrome_options.add_argument('--proxy-server=http://user:pass@proxy.example.com:8000')
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(options=chrome_options)

# Ocultando WebDriver
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

# Scraping con retrasos
urls = ['https://www.wildberries.ru/catalog/...', ...]

for url in urls:
    driver.get(url)
    # Retraso aleatorio de 3-7 segundos
    time.sleep(random.uniform(3, 7))
    
    # Scroll para simular lectura
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight/2);")
    time.sleep(random.uniform(1, 3))
    
    # Scraping de datos
    # ...

Servicios de scraping de marketplaces listos

Si no deseas configurar el scraper tú mismo, utiliza servicios especializados:

  • Mpstats.io — análisis de Wildberries y Ozon, monitoreo automático de precios y ventas
  • SellerFox — monitoreo de competidores en marketplaces, seguimiento de existencias
  • Moneyplace — scraping de Avito, publicación automática de anuncios
  • Parsehub — scraper visual para cualquier sitio, incluidos marketplaces

Estos servicios ya han configurado proxies, límites y elusión de protecciones — solo te queda indicar qué hacer scraping. Desventaja: suscripción mensual desde 2000₽.

Monitoreo de bloqueos y respuesta automática

Incluso con la configuración correcta, los bloqueos son posibles: los marketplaces actualizan sus protecciones, los proxies caen en listas negras, los límites cambian. Es importante rastrear problemas y reaccionar automáticamente.

Señales de bloqueo que debes rastrear:

  • HTTP 429 (Demasiadas Solicitudes) — se ha superado el límite de solicitudes, se necesita una pausa o cambio de IP
  • HTTP 403 (Prohibido) — IP bloqueada, se necesita rotación inmediata de proxies
  • HTTP 503 (Servicio No Disponible) — sobrecarga temporal o protección contra DDoS
  • Captcha en la respuesta — se ha detectado automatización, se necesita reducir la actividad
  • Respuestas vacías o redirección a la página principal — bloqueo suave
  • Aumento brusco en el tiempo de respuesta — puede ser limitación de tasa del lado del servidor

Respuesta automática a bloqueos (ejemplo en Python):

import requests
import time
from datetime import datetime

class SmartParser:
    def __init__(self, proxy_list):
        self.proxy_list = proxy_list
        self.current_proxy_index = 0
        self.request_count = 0
        self.blocked_proxies = set()
        
    def get_next_proxy(self):
        # Saltar proxies bloqueados
        while self.current_proxy_index in self.blocked_proxies:
            self.current_proxy_index = (self.current_proxy_index + 1) % len(self.proxy_list)
        
        proxy = self.proxy_list[self.current_proxy_index]
        return {'http': proxy, 'https': proxy}
    
    def rotate_proxy(self):
        self.current_proxy_index = (self.current_proxy_index + 1) % len(self.proxy_list)
        self.request_count = 0
        
    def make_request(self, url):
        max_retries = 3
        
        for attempt in range(max_retries):
            try:
                proxy = self.get_next_proxy()
                response = requests.get(url, proxies=proxy, timeout=10)
                
                # Verificación de bloqueo
                if response.status_code == 429:
                    print(f"[{datetime.now()}] ¡Límite de tasa! Pausa de 60 segundos...")
                    time.sleep(60)
                    self.rotate_proxy()
                    continue
                    
                elif response.status_code == 403:
                    print(f"[{datetime.now()}] ¡IP bloqueada! Rotación de proxies...")
                    self.blocked_proxies.add(self.current_proxy_index)
                    self.rotate_proxy()
                    continue
                    
                elif response.status_code == 503:
                    print(f"[{datetime.now()}] Servidor sobrecargado. Pausa de 120 segundos...")
                    time.sleep(120)
                    continue
                
                # Solicitud exitosa
                self.request_count += 1
                
                # Rotación después de 200 solicitudes
                if self.request_count >= 200:
                    self.rotate_proxy()
                    time.sleep(10)  # Pausa después de la rotación
                
                return response
                
            except requests.exceptions.Timeout:
                print(f"[{datetime.now()}] Timeout. Intento {attempt + 1}/{max_retries}")
                time.sleep(5)
                
        return None  # Todos los intentos agotados

Registro y alertas: Configura notificaciones para eventos críticos. Por ejemplo, envía un mensaje a Telegram cuando:

  • Más del 30% de los proxies del pool están bloqueados
  • El porcentaje de solicitudes exitosas cae por debajo del 80%
  • El scraper no ha recibido datos durante más de 30 minutos
  • Se detectó un captcha en las respuestas

Métricas para monitorear:

  • Tasa de éxito — porcentaje de solicitudes exitosas (debe ser >90%)
  • Tiempo de respuesta promedio — tiempo promedio de respuesta (un aumento puede indicar problemas)
  • Solicitudes por hora — número de solicitudes por hora por cada proxy
  • Salud del proxy — porcentaje de proxies operativos en el pool
  • Tasa de bloqueos — frecuencia de bloqueos (debe ser <5%)

Usa dashboards para visualizar métricas: Grafana, Datadog o simples Google Sheets con actualización automática a través de la API.

Conclusión

Los bloqueos al hacer scraping en marketplaces no son un obstáculo, sino un desafío que se puede resolver con la configuración correcta de las herramientas. Puntos clave para un funcionamiento estable sin baneos:

  • Usa proxies residenciales para Wildberries, Ozon y Avito — los proxies de centros de datos no funcionan aquí
  • Configura retrasos aleatorizados de 2-5 segundos entre solicitudes
  • Rota la IP después de cada 150-300 solicitudes o cada 30-60 minutos
  • Usa encabezados HTTP realistas con User-Agent actualizados
  • Monitorea bloqueos y reacciona automáticamente a ellos
  • Para Avito, es obligatoria la vinculación geográfica de la IP a la ciudad del anuncio

Un scraper bien configurado con proxies de calidad puede funcionar durante meses sin un solo bloqueo, recopilando decenas de miles de productos diariamente. Lo principal es no apresurarse por la velocidad, sino simular el comportamiento de un usuario normal.

Si planeas hacer scraping regularmente de Wildberries, Ozon o Avito, te recomendamos usar proxies residenciales con rotación automática — ofrecen la máxima estabilidad y el mínimo riesgo de bloqueos. Para tareas que requieren IP móviles (por ejemplo, eludir bloqueos estrictos de Avito), son adecuados los proxies móviles con IP de operadores rusos.

```