Los agregadores de viajes como Aviasales, Booking, Skyscanner se protegen activamente contra la recopilación automática de datos: bloquean IP después de 10-20 solicitudes, muestran captchas y distorsionan precios para bots. Si estás monitoreando precios de boletos de avión o hoteles para tu servicio, programa de afiliados o análisis de mercado, sin proxies correctamente configurados, recibirás un baneo en solo unos minutos de funcionamiento del scraper.
En esta guía, analizaremos qué proxies son necesarios para un scraping estable de sitios de viajes, cómo configurar la rotación de IP, eludir sistemas anti-bots de Cloudflare y Akamai, y qué errores conducen a bloqueos incluso al usar proxies.
Por qué los agregadores de viajes bloquean el scraping y cómo lo hacen
Los agregadores de viajes sufren pérdidas reales debido al scraping: cada solicitud a su API cuesta dinero (pagan a las aerolíneas y hoteles por el acceso a los datos), y los competidores utilizan los precios recopilados para atraer clientes. Por lo tanto, Aviasales, Booking, Skyscanner, Kayak invierten millones en protección anti-bots.
Métodos principales de detección de scraping
1. Análisis de la frecuencia de solicitudes desde una IP. Un usuario normal hace de 3 a 5 búsquedas por sesión, un scraper — cientos por minuto. Si desde tu IP llegan más de 15-20 solicitudes por minuto, el sistema lo marca como sospechoso. Después de 50-100 solicitudes — bloqueo por 24 horas o para siempre.
2. Fingerprinting del navegador. Los sitios de viajes recopilan decenas de parámetros: resolución de pantalla, zona horaria, fuentes instaladas, huella WebGL, huella de canvas, contexto de audio. Si estos parámetros no coinciden con la geolocalización declarada de la IP (por ejemplo, IP de Moscú, pero zona horaria UTC+8) — es un signo de proxy o VPN.
3. Verificación de la reputación de la IP. Los sitios utilizan bases de datos de proveedores de proxies conocidos, centros de datos, servidores VPN. Si tu IP aparece en tales bases (por ejemplo, MaxMind GeoIP2, IPQualityScore, SEON), las solicitudes son bloqueadas o se muestra un captcha. Booking y Skyscanner son especialmente estrictos con IP de rangos de Amazon AWS, Google Cloud, DigitalOcean.
4. Análisis del comportamiento. Los sistemas anti-bots rastrean los movimientos del ratón, la velocidad de desplazamiento, las pausas entre clics. Selenium y Puppeteer, sin parches adicionales, dejan huellas: la propiedad navigator.webdriver, ausencia de complementos, tamaños de ventana atípicos. Incluso con proxies, este tráfico es fácil de reconocer.
5. TLS-fingerprinting. Los sistemas modernos anti-bots (Cloudflare, Akamai) analizan los parámetros del apretón de manos TLS: orden de suites de cifrado, extensiones, versión del protocolo. Las solicitudes de Python y bibliotecas estándar tienen un TLS-fingerprint diferente al de los navegadores — esto revela instantáneamente un bot.
Caso real: Uno de nuestros clientes estaba scrapeando precios en Booking a través de 100 proxies de centros de datos (DigitalOcean). Después de 2 horas de trabajo, todas las IP fueron bloqueadas para siempre — Booking detectó el rango del centro de datos y lo añadió a la lista negra. Cambiar a proxies residenciales resolvió el problema: durante un mes de trabajo — cero bloqueos.
Qué tipos de proxies son adecuados para el monitoreo de precios: comparación
Para el scraping de agregadores de viajes se utilizan tres tipos de proxies: residenciales, móviles y proxies de centros de datos. Cada tipo tiene sus pros, contras y escenarios de aplicación. La elección depende del volumen de scraping, el presupuesto y los requisitos de anonimato.
| Tipo de proxy | Nivel de confianza de los sitios | Velocidad | Costo (aproximado) | Mejor para |
|---|---|---|---|---|
| Proxies residenciales | Muy alto (IP de usuarios domésticos) | Media (300-800 ms) | $$$ (por tráfico) | Booking, Expedia, Airbnb — sitios con protección estricta |
| Proxies móviles | Máximo (IP de operadores móviles) | Baja (500-1500 ms) | $$$$ (los más caros) | Scraping de versiones móviles, solicitudes API, eludir Cloudflare |
| Proxies de centros de datos | Bajo (fácilmente detectables) | Muy alta (50-150 ms) | $ (los más baratos) | API de Aviasales, agregadores menos protegidos, pruebas |
Características de elección para sitios de viajes específicos
Aviasales y Skyscanner — son relativamente tolerantes al scraping a través de API (si tienes acceso de afiliado). Para el scraping web, son suficientes proxies residenciales con rotación cada 5-10 solicitudes. Los proxies de centros de datos funcionan, pero requieren un gran grupo de IP (mínimo 500 direcciones) y una rotación lenta (no más de 1 solicitud cada 30 segundos desde una IP).
Booking.com y Expedia — utilizan Cloudflare Enterprise con reglas estrictas. Los proxies de centros de datos son bloqueados en el 90% de los casos incluso con scraping lento. Solo se necesitan proxies residenciales o móviles, además de emulación de un navegador real (Selenium Stealth, Puppeteer Extra con complementos). Rotación de IP — después de cada 3-5 solicitudes.
Airbnb — uno de los sitios más protegidos. Requiere proxies residenciales con geolocalización que coincida con la consulta de búsqueda (si buscas hoteles en París, la IP debe ser francesa). Cookies, referer y encabezados del navegador son obligatorios. Los proxies móviles muestran mejores resultados para el scraping a través de la API móvil.
Kayak y Momondo — nivel medio de protección. Los proxies residenciales son la mejor opción. Se pueden utilizar proxies de centros de datos, pero con rotación obligatoria y retrasos entre solicitudes (mínimo 10-15 segundos).
Proxies residenciales vs de centro de datos: qué elegir para sitios de viajes
La principal diferencia entre los proxies residenciales y los de centros de datos es la fuente de la dirección IP. Los residenciales utilizan IP de proveedores de internet domésticos reales (Rostelecom, MTS, Comcast, Verizon), los proxies de centros de datos utilizan IP de servidores de empresas de hosting (AWS, Google Cloud, OVH). Los sitios de viajes confían en las IP residenciales porque son utilizadas por usuarios normales.
Cuándo son obligatorios los proxies residenciales
1. Scraping de sitios con Cloudflare/Akamai. Booking, Expedia, Airbnb utilizan estos sistemas — bloquean automáticamente el 95% de las IP de centros de datos. Los proxies residenciales pasan la verificación porque sus IP no están en las bases de datos de proveedores de proxies.
2. Recopilación de precios con vinculación a la geolocalización. Los sitios de viajes muestran diferentes precios a usuarios de diferentes países y ciudades (debido a impuestos, tipos de cambio, promociones locales). Si necesitas precios para una región específica (por ejemplo, precios para residentes de Alemania), los proxies residenciales con IP alemanas son la única opción confiable.
3. Scraping a largo plazo sin bloqueos. Si monitoreas precios 24/7 durante meses, los proxies residenciales se amortizan — no pierdes tiempo reemplazando IP bloqueadas y configurando nuevos proxies.
Cuándo se pueden utilizar proxies de centros de datos
1. Scraping a través de APIs oficiales. Si tienes acceso de afiliado a la API de Aviasales, API de Skyscanner — el tipo de proxy no es crítico, las API son menos sensibles a la fuente de IP. Los proxies de centros de datos ofrecerán alta velocidad y bajo costo.
2. Pruebas y desarrollo del scraper. En la etapa de escritura y depuración del código, utiliza proxies de centros de datos — son más baratos, más rápidos, y no importa si algunas IP son baneadas.
3. Scraping de agregadores menos protegidos. Algunos sitios de viajes regionales o agregadores de boletos de autobús no utilizan protección avanzada contra bots. Para ellos, los proxies de centros de datos con un gran grupo de IP y rotación lenta son adecuados.
Consejo: Combina tipos de proxies. Utiliza proxies residenciales para solicitudes críticas (primera búsqueda, obtención de tokens, eludir captchas), y proxies de centros de datos para solicitudes masivas a la API o endpoints menos protegidos. Esto reducirá los costos en un 40-60% manteniendo la estabilidad.
Estrategia de rotación de IP: con qué frecuencia cambiar proxies al hacer scraping
La rotación correcta de IP es clave para un scraping a largo plazo sin bloqueos. Si cambias IP demasiado a menudo, agotarás rápidamente el grupo de direcciones y tendrás altos costos de tráfico. Si lo haces demasiado poco, acumularás actividad sospechosa en una IP y recibirás un baneo.
Tipos de rotación de proxies
1. Rotación por solicitudes (rotating proxies). La IP cambia automáticamente después de cada solicitud o después de un número determinado de solicitudes. La mayoría de los proveedores de proxies residenciales ofrecen este modo: te conectas a un solo endpoint (por ejemplo, gate.proxycove.com:8000), y la IP cambia del lado del proveedor.
Ventajas: Facilidad de configuración, no necesitas gestionar manualmente el grupo de IP, riesgo mínimo de bloqueo de una sola IP.
Desventajas: No se pueden controlar las sesiones (si necesitas mantener cookies o tokens), cada solicitud = nueva IP = nuevos costos de tráfico.
2. Sticky sessions (proxies de sesión). La IP se asigna a tu sesión durante un tiempo determinado (generalmente 10-30 minutos). Haces varias solicitudes desde una IP, luego se cambia automáticamente. Se configura a través de parámetros de proxy (por ejemplo, añadiendo session-id123 en el login).
Ventajas: Puedes mantener cookies y tokens dentro de la sesión, menor consumo de tráfico (una IP = varias solicitudes).
Desventajas: Si la IP es baneada durante la sesión, todas las solicitudes posteriores en esa sesión serán bloqueadas.
3. Rotación manual desde el grupo. Obtienes una lista de direcciones IP (por ejemplo, 1000) y gestionas la rotación en el código del scraper: eliges una IP aleatoria de la lista, haces N solicitudes, cambias a la siguiente. Típico para proxies de centros de datos.
Ventajas: Control total sobre la rotación, puedes excluir IP bloqueadas del grupo.
Desventajas: Necesitas escribir la lógica de rotación en el código, gestionar el estado de las IP (cuáles se han utilizado, cuáles están bloqueadas).
Frecuencia de rotación recomendada para sitios de viajes
| Sitio | Tipo de proxy | Frecuencia de rotación | Máx. solicitudes desde 1 IP |
|---|---|---|---|
| Booking.com | Residenciales | Después de 3-5 solicitudes | 5-7 |
| Expedia | Residenciales | Después de 5-8 solicitudes | 8-10 |
| Airbnb | Residenciales/móviles | Después de 2-4 solicitudes | 3-5 |
| Aviasales | Residenciales/centro de datos | Después de 10-15 solicitudes | 15-20 |
| Skyscanner | Residenciales/centro de datos | Después de 8-12 solicitudes | 12-15 |
| Kayak | Residenciales | Después de 5-10 solicitudes | 10-12 |
Importante: Estos son valores promedios. Los límites reales dependen de la hora del día (por la noche, los sistemas anti-bots son más estrictos), el tipo de solicitudes (buscar boletos de avión = mayor carga en la API que ver un hotel), la calidad de la emulación del navegador. Comienza con valores conservadores (menos solicitudes por IP), luego aumenta gradualmente, monitoreando el porcentaje de bloqueos.
Geo-targeting de proxies: por qué es importante el país y la ciudad de la dirección IP
Los sitios de viajes muestran diferentes precios según la geolocalización del usuario. Esto no es un error, sino un modelo de negocio: las aerolíneas y hoteles establecen diferentes tarifas para diferentes mercados. Por ejemplo, un boleto de Moscú a Nueva York puede costar $600 para un usuario de Rusia y $750 para un usuario de EE. UU. (debido a impuestos, competencia, poder adquisitivo).
Cómo los sitios determinan la geolocalización
1. Por dirección IP. Método principal. Los sitios utilizan bases de datos GeoIP (MaxMind, IP2Location) que asocian IP con ciudad, región, país. La precisión de la determinación de la ciudad es del 70-90%, del país del 95-99%.
2. Por el idioma del navegador y la zona horaria. Si la IP muestra Alemania, pero el idioma del navegador es ruso y la zona horaria es UTC+3 (Moscú) — es un signo de proxy. El sitio puede mostrar un captcha o bloquear la solicitud.
3. Por la moneda y la configuración de la cuenta. Si estás logueado en una cuenta de Booking, el sitio recuerda tu país al registrarte. Cambiar la IP a otro país generará sospechas — Booking puede pedirte que confirmes tu identidad o bloquear tu cuenta.
Cómo elegir correctamente la geolocalización del proxy
Para recopilar precios de un mercado específico: Utiliza IP del país cuyos precios te interesan. Si monitoreas precios para el mercado ruso — utiliza proxies residenciales rusos. Para el mercado europeo — proxies de países de la UE (Alemania, Francia, Polonia). Para EE. UU. — proxies estadounidenses.
Para eludir bloqueos geográficos: Algunos sitios de viajes o ofertas especiales solo están disponibles desde ciertos países. Por ejemplo, los vuelos internos en EE. UU. a menudo son más baratos al reservar desde una IP estadounidense. Utiliza proxies del país necesario + configura el idioma del navegador y la zona horaria para ese país.
Para el scraping de datos globales: Si necesitas precios para todos los mercados (por ejemplo, para análisis), utiliza un grupo de proxies de diferentes países. Rota la geolocalización junto con la IP: solicitud desde una IP alemana → precios alemanes, solicitud desde una IP francesa → precios franceses.
Error: Usar IP de un país, pero buscar hoteles/boletos en otro país con moneda diferente. Por ejemplo, IP de Rusia, búsqueda de hoteles en Tailandia, moneda — euro. Esto se ve sospechoso. O utiliza IP del país de destino, o IP de tu país real con su moneda.
Configuración de proxies para scrapers y scripts populares
Analizaremos la configuración de proxies para las herramientas de scraping más populares de sitios de viajes. Los ejemplos se presentan para proxies residenciales con rotación, pero también son adecuados para otros tipos.
Python + requests / httpx
La opción más simple para hacer scraping de APIs o páginas simples sin JavaScript. Adecuado para la API de Aviasales, API de Skyscanner, endpoints simples sin Cloudflare.
import requests
# Datos del proxy (reemplaza con los tuyos)
proxy_host = "gate.proxycove.com"
proxy_port = "8000"
proxy_user = "your_username"
proxy_pass = "your_password"
proxies = {
"http": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
"https": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"
}
# Encabezados del navegador (¡obligatorio!)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Accept-Language": "en-US,en;q=0.9",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Referer": "https://www.google.com/"
}
# Solicitud a través del proxy
response = requests.get(
"https://www.aviasales.com/search",
proxies=proxies,
headers=headers,
timeout=30
)
print(response.status_code)
print(response.text[:500]) # Primeros 500 caracteres de la respuesta
Importante: Para proxies residenciales con rotación, cada nueva solicitud obtendrá automáticamente una nueva IP. Si necesitas una sesión fija (una IP para varias solicitudes), añade el ID de sesión en el nombre de usuario: your_username-session-12345.
Selenium (para sitios con JavaScript)
Booking, Expedia, Airbnb utilizan activamente JavaScript para renderizar contenido y realizar verificaciones anti-bots. Selenium emula un navegador real, pero requiere configuraciones adicionales para eludir la detección.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
# Configuración de Chrome
chrome_options = Options()
# Proxy
proxy_host = "gate.proxycove.com"
proxy_port = "8000"
proxy_user = "your_username"
proxy_pass = "your_password"
# Formato de proxy para Chrome
chrome_options.add_argument(f'--proxy-server=http://{proxy_host}:{proxy_port}')
# Ocultando la automatización
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
# User-Agent
chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36')
driver = webdriver.Chrome(options=chrome_options)
# Eliminando la propiedad webdriver
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
# Autenticación del proxy (si es necesario)
# Para Chrome, necesitas crear una extensión con autenticación, consulta selenium-wire o simplemente utiliza Puppeteer
driver.get("https://www.booking.com/")
print(driver.title)
driver.quit()
Problema: Chrome no soporta la autenticación de proxies a través de login:password directamente. Soluciones: utiliza la biblioteca selenium-wire (añade proxy con autenticación), crea una extensión de Chrome para la autenticación, o utiliza Puppeteer (Node.js).
Puppeteer (Node.js) — la mejor opción para sitios complejos
Puppeteer emula mejor el navegador que Selenium y se configura fácilmente con autenticación de proxies. Se recomienda para Booking, Airbnb, Expedia.
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: true,
args: [
'--proxy-server=http://gate.proxycove.com:8000',
'--disable-blink-features=AutomationControlled',
'--no-sandbox'
]
});
const page = await browser.newPage();
// Autenticación del proxy
await page.authenticate({
username: 'your_username',
password: 'your_password'
});
// Ocultando el webdriver
await page.evaluateOnNewDocument(() => {
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
});
});
// User-Agent
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36');
await page.goto('https://www.booking.com/', { waitUntil: 'networkidle2' });
const title = await page.title();
console.log('Título:', title);
await browser.close();
})();
Para una mejor protección contra la detección, utiliza el complemento puppeteer-extra-plugin-stealth — oculta automáticamente todos los signos de automatización.
Soluciones listas: Scrapy, Crawlee
Scrapy (Python) — framework para scraping a gran escala. Soporta proxies a través de middleware. Ejemplo de configuración en settings.py:
# settings.py
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1,
}
# En spider
class TravelSpider(scrapy.Spider):
def start_requests(self):
proxy = "http://your_username:your_password@gate.proxycove.com:8000"
yield scrapy.Request(
url="https://www.aviasales.com/",
meta={'proxy': proxy},
callback=self.parse
)
Crawlee (Node.js) — framework moderno con rotación de proxies integrada, elusión de sistemas anti-bots, reintentos automáticos. Ideal para sitios de viajes.
Eludir sistemas anti-bots de Cloudflare, PerimeterX, Akamai
Incluso con proxies residenciales de calidad, puedes enfrentar bloqueos si no eludes correctamente los sistemas anti-bots. Booking utiliza Cloudflare, Airbnb — PerimeterX, algunos sitios — Akamai Bot Manager. Estos sistemas analizan no solo la IP, sino también el comportamiento, el fingerprint del navegador, el apretón de manos TLS.
Cloudflare: métodos principales de elusión
1. Utiliza automatización del navegador. Cloudflare verifica el desafío de JavaScript, que se ejecuta en el navegador. Solicitudes HTTP simples (requests, curl) no pasarán la verificación. Necesitas Puppeteer, Playwright o Selenium con configuraciones adecuadas.
2. Oculta signos de automatización. Instala puppeteer-extra-plugin-stealth (Node.js) o undetected-chromedriver (Python). Estas bibliotecas parchean el navegador, eliminando propiedades como navigator.webdriver, window.chrome, modificando permisos de API.
3. Fingerprint TLS correcto. Cloudflare analiza el apretón de manos TLS. Utiliza bibliotecas que emulan TLS de navegadores: curl-impersonate (emula TLS de Chrome/Firefox), tls-client (Go), hrequests (Python).
4. Resuelve captchas automáticamente. Si Cloudflare muestra un captcha (Turnstile), utiliza servicios de resolución de captchas: 2Captcha, Anti-Captcha, CapSolver. Se integran a través de API y cuestan $1-3 por 1000 soluciones.
PerimeterX (Airbnb, algunos sitios de viajes)
PerimeterX es uno de los sistemas anti-bots más complejos. Analiza el comportamiento del usuario (movimientos del ratón, clics, desplazamiento), crea un fingerprint del dispositivo, verifica cookies y localStorage.
Métodos de elusión:
1. Emula el comportamiento del usuario. Añade pausas aleatorias entre acciones (2-5 segundos), mueve el ratón, desplaza la página. En Puppeteer, utiliza la biblioteca ghost-cursor para movimientos realistas del ratón.
2. Mantén cookies y localStorage. PerimeterX genera tokens que se almacenan en cookies (_px3, _pxhd) y localStorage. Si cambias IP, pero mantienes cookies — es sospechoso. O cambias IP + limpias cookies, o utilizas sesiones fijas (una IP = una sesión con cookies).
3. Utiliza proxies móviles. PerimeterX es más estricto con las IP de centros de datos. Los proxies móviles muestran mejores resultados para eludir PerimeterX.
Akamai Bot Manager
Akamai analiza datos de sensores (acelerómetro, giroscopio en móviles), fingerprint WebGL, contexto de audio, rendimiento del dispositivo. Eludirlo requiere emulación avanzada del navegador.
Recomendaciones: Utiliza navegadores reales (no headless), proxies móviles, añade retrasos aleatorios, emula eventos táctiles (touch events). Para casos complejos — utiliza granjas de navegadores (BrowserStack, LambdaTest) o navegadores anti-detección (AdsPower, Multilogin).
Errores comunes al hacer scraping de sitios de viajes a través de proxies
Incluso los desarrolladores experimentados cometen errores que conducen a bloqueos. Aquí están los problemas más comunes y sus soluciones.
Error 1: Uso de un solo User-Agent para todas las solicitudes
Si todas tus solicitudes provienen del mismo User-Agent (por ejemplo, el estándar de Python requests: python-requests/2.28.0), esto revela instantáneamente un bot. Incluso si cambias IP, el sitio ve el mismo UA y asocia las solicitudes.
Solución: Utiliza una lista de User-Agents reales de navegadores (Chrome, Firefox, Safari) y rótalos. La biblioteca fake-useragent (Python) genera automáticamente UA aleatorios.
Error 2: Velocidad de solicitudes demasiado alta
El scraper hace 100 solicitudes por segundo — esto es físicamente imposible para un humano. Incluso con diferentes IP, los sistemas anti-bots detectan actividad anómala por patrones (todas las solicitudes llegan exactamente cada 0.01 segundos).
Solución: Añade retrasos aleatorios entre solicitudes: time.sleep(random.uniform(2, 5)). Para sitios de viajes, lo óptimo es: 2-5 segundos entre solicitudes desde una IP, 0.5-2 segundos entre solicitudes desde diferentes IP.
Error 3: Ignorar cookies y sesiones
Los sitios de viajes utilizan cookies para rastrear sesiones, almacenar tokens de sistemas anti-bots, personalizar precios. Si haces cada solicitud sin cookies (como un nuevo usuario), esto es sospechoso.
Solución: Utiliza requests.Session() (Python) o mantén cookies entre solicitudes en Puppeteer. Para sesiones fijas (una IP = varias solicitudes) es obligatorio mantener cookies.
Error 4: Incongruencia entre la geolocalización de la IP y los parámetros del navegador
IP de Alemania, pero el idioma del navegador es ruso, la zona horaria es UTC+3, la moneda es rublos. Los sistemas anti-bots ven esta incongruencia y bloquean la solicitud.
Solución: Sincroniza los parámetros del navegador con la geolocalización del proxy. Si utilizas una IP alemana — establece el idioma alemán (Accept-Language: de-DE), la zona horaria Europe/Berlin, la moneda EUR.
Error 5: Uso de proxies gratuitos o de baja calidad
Los proxies gratuitos y los proxies públicos baratos ya están bloqueados en todos los grandes sitios de viajes. Sus IP están en listas negras, tienen mala reputación (se utilizaron para spam, DDoS).
Solución: Utiliza proxies residenciales o móviles de calidad de proveedores confiables. Verifica la reputación de la IP a través de servicios como IPQualityScore, Scamalytics antes de usarlos.
Lista de verificación antes de lanzar el scraper:
✅ Proxies — residenciales o móviles, con la geolocalización necesaria
✅ User-Agent — navegador real, rotado
✅ Cookies — mantenidas dentro de la sesión
✅ Retrasos — 2-5 segundos entre solicitudes
✅ Rotación de IP — después de 3-10 solicitudes (depende del sitio)