Cómo evitar bloqueos de IP de Amazon al hacer scraping

Entender el sistema de prohibición IP de Amazon y aprender estrategias probadas para evitar la detección. Cubre la configuración de proxy residencial, solicite aleatorización, geo-targeting y procedimientos de recuperación.

Cómo evitar bloqueos de IP de Amazon al hacer scraping

Comprender el sistema de prohibición IP de Amazon

Amazon opera uno de los sistemas anti-bot más sofisticados en Internet. Cuando sus direcciones IP se prohíben, pierde acceso a los datos de productos que impulsan sus operaciones de precios, investigación y inteligencia competitivas. Comprender cómo Amazon detecta y prohibe IPs es el primer paso para prevenirlo.

Amazon no simplemente bloquea IPs individuales — construye perfiles conductuales. Un único IP sospechoso podría desencadenar bloques blandos (CAPTCHA), mientras que las violaciones persistentes conducen a bloques duros (negación completa del acceso). El sistema rastrea patrones en rangos IP, por lo que conseguir una IP prohibida puede aumentar el escrutinio en direcciones vecinas. Para una comprensión completa de los métodos de detección, consulte nuestra guía cómo los sistemas antibot detectan proxies.

Cómo Amazon detecta tráfico automatizado

La detección de Amazon opera en múltiples capas simultáneamente.

Detección de volumen

Detección de volumen
SignalLo que Amazon chequeaNivel de riesgo
TLS FingerprintTLS Handhake coincide con las bibliotecas bot conocidas (Python peticiones, curl)Alto
Header OrderHTTP headers sent in non-browser orderMediana
Cabeceras desaparecidasAbsence of Accept-Language, Accept-Encoding, etc.Alto
User-AgentCadenas desactualizadas, inválidas o conocidas-bot User-AgentAlto
Cookie HandlingNo aceptar o devolver cookies de sesiónMediana

Detección conductual

Detección conductual
PatrónDescripciónNivel de riesgo
Intervalos fijosSolicitudes que llegan a intervalos exactos (cada 5.0 segundos)Alto
Rastreo secuencialVisitando ASINs en orden numérico o alfabéticoAlto
No hay ruta de navegaciónSaltar directamente a las páginas de productos sin navegarMediana
Volumen de alta solicitudCientos de solicitudes por minuto de una IPCrítica
No Ejecución de JavaScriptPáginas cargadas sin ejecutar JavaScriptMediana

Detección IP-Level

Amazon mantiene bases de datos de rangos IP de centro de datos y proveedores proxy conocidos. Datacenter IPs enfrentan escrutinio intensificado inmediato independientemente del comportamiento. IP residentes empezar con mayor confianza porque comparten piscinas con verdaderos compradores de Amazon.

Tipos de bloques de Amazon

Comprender los diferentes tipos de bloques le ayuda a responder adecuadamente.

Bloques blandos (CAPTCHA)

La respuesta más común. Amazon sirve una página CAPTCHA en lugar de los datos del producto. Esta es una advertencia - continuar desde la misma IP y se escalará a un bloque duro. Cuando reciba un CAPTCHA, retroceda inmediatamente y cambie a una nueva IP.

Bloques duros (503/403 Errores)

Negación completa de acceso, normalmente devolver códigos de estado HTTP 503 o 403. Los bloques duros pueden durar horas a días para una IP específica. Una vez bloqueado, que IP es efectivamente inutilizable para Amazon hasta que el bloque expira.

Manipulación del contenido

Amazon a veces sirve diferentes contenidos a los bots sospechosos — precios incorrectos, reseñas perdidas, o datos de productos incompletos. Esto es más difícil de detectar porque usted recibe una respuesta de 200. Valida tus datos eliminados contra valores conocidos para atrapar esto.

Key takeaway: CAPTCHAs son señales de advertencia, no sólo obstáculos. Trate a cada CAPTCHA como un indicador que su enfoque actual necesita ajuste.

Estrategias de prevención

1. Uso de ejes residenciales

Este es el cambio más impactante que puedes hacer. Los proxies residenciales utilizan direcciones IP asignadas a suscriptores de Internet reales, haciendo que sus solicitudes sean indistinguibles de verdaderos compradores. La piscina proxy residencial de ProxyHat cubre 195 países con millones de IPs.

# ProxyHat residential proxy with geo-targeting
http://USERNAME-country-US:PASSWORD@gate.proxyhat.com:8080
# For Amazon.de
http://USERNAME-country-DE:PASSWORD@gate.proxyhat.com:8080
# For Amazon.co.uk
http://USERNAME-country-GB:PASSWORD@gate.proxyhat.com:8080

2. Implementar la rotación inteligente

Nunca enviar más de 5-10 solicitudes de un solo IP a Amazon. La puerta de entrada de ProxyHat gira automáticamente IPs por solicitud por defecto, pero también debe implementar controles de nivel de aplicación.

import requests
import random
import time
PROXY_BASE = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
def make_request(url, max_retries=3):
    """Make a request with automatic retry on failure."""
    for attempt in range(max_retries):
        # Each request gets a fresh IP from the rotating proxy
        proxies = {"http": PROXY_BASE, "https": PROXY_BASE}
        headers = {
            "User-Agent": random.choice(USER_AGENTS),
            "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",
        }
        try:
            response = requests.get(url, headers=headers, proxies=proxies, timeout=30)
            # Check for CAPTCHA
            if "captcha" in response.text.lower() or response.status_code == 503:
                print(f"CAPTCHA/block detected on attempt {attempt + 1}")
                time.sleep(random.uniform(10, 30))  # Longer backoff
                continue
            if response.status_code == 200:
                return response
        except requests.RequestException:
            time.sleep(random.uniform(5, 15))
    return None

3. Patrones de solicitud aleatorios

Cada aspecto de su patrón de solicitud debe incluir aleatoriedad para evitar la detección estadística.

import random
import time
def random_delay(min_sec=2, max_sec=7):
    """Add human-like random delay."""
    delay = random.uniform(min_sec, max_sec)
    # Occasionally add a longer pause (simulates reading a page)
    if random.random() < 0.1:  # 10% chance
        delay += random.uniform(10, 30)
    time.sleep(delay)
def shuffle_targets(urls):
    """Randomize the order of URLs to avoid sequential patterns."""
    shuffled = urls.copy()
    random.shuffle(shuffled)
    return shuffled
def get_random_user_agent():
    """Return a realistic, current User-Agent string."""
    agents = [
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15",
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    ]
    return random.choice(agents)

4. Geo-Location Match a Marketplace

Acceder a amazon.com de una IP alemana o amazon.de de una IP japonesa es una señal fuerte de actividad automatizada. Siempre coincide con su ubicación proxy en el mercado de destino.

4. Geo-Location Match a Marketplace
MercadoProxy CountryConfiguración ProxyHat
amazon.comEstados UnidosUSERNAME-country-US
amazon.co.ukReino UnidoUSERNAME-country-GB
amazon.deAlemaniaUSERNAME-country-DE
amazon.co.jpJapónUSERNAME-country-JP
amazon.frFranciaUSERNAME-country-FR
amazon.inIndiaUSERNAME-country-IN

Check Lista de ubicación completa de ProxyHat para todos los países apoyados.

5. Períodos de sesiones adecuados

Sesiones de pistas de Amazon a través de cookies. Aceptar y devolver las cookies hace que sus solicitudes se vean más como un navegador real. Para navegar por paginas (Resultados de búsqueda, reseñas), utilice sesiones pegajosas para mantener el mismo frasco IP y cookie.

# Sticky session for paginated scraping
PROXY_SESSION = "http://USERNAME-session-amz{session_id}:PASSWORD@gate.proxyhat.com:8080"
def create_session(session_id):
    """Create a requests session with sticky proxy and cookies."""
    session = requests.Session()
    proxy = PROXY_SESSION.format(session_id=session_id)
    session.proxies = {"http": proxy, "https": proxy}
    session.headers.update({
        "User-Agent": get_random_user_agent(),
        "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",
    })
    return session

6. Supervisar su tasa de éxito

Rastree su HTTP 200 velocidad, CAPTCHA tasa y velocidad de bloqueo en tiempo real. Establecer umbrales para acelerar automáticamente el raspador cuando la detección aumenta.

class SuccessTracker:
    def __init__(self, captcha_threshold=0.1, block_threshold=0.05):
        self.total = 0
        self.success = 0
        self.captchas = 0
        self.blocks = 0
        self.captcha_threshold = captcha_threshold
        self.block_threshold = block_threshold
    def record(self, status):
        self.total += 1
        if status == "success":
            self.success += 1
        elif status == "captcha":
            self.captchas += 1
        elif status == "block":
            self.blocks += 1
    @property
    def should_throttle(self):
        if self.total < 10:
            return False
        captcha_rate = self.captchas / self.total
        block_rate = self.blocks / self.total
        return captcha_rate > self.captcha_threshold or block_rate > self.block_threshold
    @property
    def success_rate(self):
        return self.success / self.total if self.total > 0 else 0

Recuperación después de una prohibición

Si se prohíbe una IP, aquí es cómo recuperar:

  1. Para inmediatamente: No siga enviando solicitudes de IP prohibidas o IPs cercanas.
  2. Interruptor IPs: Utilice un nuevo conjunto de IPs residenciales de un rango diferente. La gran piscina de ProxyHat garantiza que siempre tiene IPs limpias disponibles.
  3. Ajuste su enfoque: Revise sus patrones de solicitud, retrasos y encabezados antes de reanudar.
  4. Comience lentamente: Al reanudarse, comience con una baja tasa de solicitud y aumente gradualmente.
  5. Espera. Las prohibiciones de Amazon suelen expirar dentro de 2448 horas para bloques blandos y hasta 7 días para bloques duros en IPs específicas.

Node.js Prevención de la prohibición

Aquí hay una implementación equivalente Node.js usando Nodo de ProxyHat SDK.

const axios = require("axios");
const { HttpsProxyAgent } = require("https-proxy-agent");
const PROXY_URL = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080";
const USER_AGENTS = [
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
];
async function safeAmazonRequest(url, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const agent = new HttpsProxyAgent(PROXY_URL);
    try {
      const response = await axios.get(url, {
        httpsAgent: agent,
        headers: {
          "User-Agent": USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)],
          "Accept-Language": "en-US,en;q=0.9",
          Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
          "Accept-Encoding": "gzip, deflate, br",
        },
        timeout: 30000,
        validateStatus: () => true,
      });
      if (response.data.toLowerCase().includes("captcha") || response.status === 503) {
        console.log(`CAPTCHA/block on attempt ${attempt + 1}`);
        await new Promise((r) => setTimeout(r, 10000 + Math.random() * 20000));
        continue;
      }
      if (response.status === 200) return response;
    } catch (err) {
      await new Promise((r) => setTimeout(r, 5000 + Math.random() * 10000));
    }
  }
  return null;
}
// Random delay between requests
function randomDelay(minMs = 2000, maxMs = 7000) {
  const delay = minMs + Math.random() * (maxMs - minMs);
  return new Promise((r) => setTimeout(r, delay));
}

Lista de verificación para la prevención

Utilice esta lista de verificación antes de ejecutar cualquier raspador de Amazon:

  • Uso de proxies residenciales (no centro de datos)
  • Proxy geolocalización coincide con el mercado objetivo
  • Las cadenas User-Agent son corrientes y rotadas
  • Todos los encabezados estándar del navegador están incluidos
  • Solicitud de retrasos se aleatorizan (2-7 segundos mínimo)
  • Las direcciones URL son escabuladas, no procesadas secuencialmente
  • El manejo de cookies está habilitado
  • CAPTCHA detección y retroceso automático están en marcha
  • La vigilancia de la tasa de éxito es activa
  • La concurrencia es limitada (a partir de 5-10 solicitudes paralelas)

Key Takeaways

  • La detección de Amazon es multicapa: solicitar huellas dactilares, patrones conductuales y reputación IP todo importa.
  • Los proxies residenciales son no negociables — los IPs de centro de datos enfrentan escrutinio intensificado inmediato.
  • Coincide geo-localización proxy en el mercado Amazon destino.
  • Aleatoriamente todo: retrasos, agentes de usuario, orden de solicitud y patrones de sesión.
  • Tratar a los CAPTCHAs como advertencias tempranas y ajustar inmediatamente.
  • Supervisar las tasas de éxito y acelerar automáticamente cuando aumenta la detección.

Para una configuración completa de chatarra en Amazon, lea nuestra Guía de chatarra de datos de productos Amazon y explorar el todo e-commerce scraping strategy. Comenzar con Los proxies residenciales de ProxyHat para el acceso confiable de Amazon.

¿Listo para empezar?

Accede a más de 50M de IPs residenciales en más de 148 países con filtrado impulsado por IA.

Ver preciosProxies residenciales
← Volver al Blog