El fin de semana pasado me tomé una cafetera entera intentando extraer la página de Best Sellers de Amazon de cuatro formas distintas. Dos me salieron muy bien, una casi me hace perder la IP y otra, literalmente, me tomó un solo clic. Aquí te cuento todo lo que aprendí.
Amazon es un monstruo del e-commerce: 600 millones de fichas de producto, más de 310 millones de cuentas activas de clientes y un sistema de Best Sellers Rank (BSR) que se actualiza cada hora. Si haces research de productos para FBA, análisis de precios de la competencia o simplemente quieres pillar tendencias antes que tus rivales, los datos de Best Sellers son oro puro.
Pero sacar esos datos de Amazon y llevarlos a una hoja de cálculo, ¿cómo se hace? Ahí es donde la cosa se pone interesante. Probé requests + BeautifulSoup, Selenium, una API de scraping y Thunderbit (nuestro AI web scraper sin código) para ver qué método realmente funciona y cuál te deja mirando una página de CAPTCHA.
¿Qué son los Amazon Best Sellers y por qué deberían importarte?
Amazon Best Sellers Rank (BSR) es el ranking en tiempo real de Amazon que ordena productos según su volumen de ventas dentro de cada categoría. Piensa en ello como una competición de popularidad, actualizada cada hora, basada tanto en datos de ventas recientes como históricos. Amazon lo describe así:
"El cálculo de Amazon Best Sellers se basa en las ventas de Amazon y se actualiza cada hora para reflejar las ventas recientes e históricas de cada artículo vendido en Amazon." — Amazon Seller Central
La página de Best Sellers muestra los 100 productos más vendidos por categoría, repartidos en dos páginas de 50 cada una. La página 1 cubre del puesto #1 al #50, y la página 2 del #51 al #100. Amazon ha confirmado que las visitas a la página y las reseñas de clientes NO afectan al BSR: depende únicamente de las ventas.
¿A quién le sirve este dato? A vendedores de e-commerce que buscan productos para FBA, a equipos comerciales que montan inteligencia competitiva, a equipos de operaciones que vigilan tendencias de precios y a analistas de mercado que siguen el crecimiento de categorías. Por experiencia, cualquiera que venda en Amazon o compita con Amazon termina necesitando estos datos en una hoja de cálculo.
¿Por qué extraer Amazon Best Sellers con Python?
La investigación manual de productos te hace perder un montón de tiempo. Un estudio de McKinsey encontró que los empleados pasan 9,3 horas por semana solo buscando y reuniendo información. Para los equipos de e-commerce, eso se traduce en horas haciendo clic por páginas de Amazon, copiando nombres y precios, y pegándolos en hojas de cálculo, para luego repetir todo la semana siguiente.
Aquí tienes un vistazo rápido a los casos de uso que hacen que extraer Best Sellers valga la pena:
| Caso de uso | Qué obtienes | Quién se beneficia |
|---|---|---|
| Investigación de productos FBA | Identificar productos con alta demanda y baja competencia mediante el BSR y el número de reseñas | Vendedores de Amazon, dropshippers |
| Precios competitivos | Seguir los cambios de precio de los productos principales de tu categoría | Equipos de e-commerce, analistas de precios |
| Monitoreo de tendencias de mercado | Detectar categorías en alza y cambios estacionales | Product managers, analistas de mercado |
| Generación de leads | Crear listas de marcas más vendidas y sus líneas de productos | Equipos de ventas, prospección B2B |
| Análisis de la competencia | Comparar tus productos con los líderes de la categoría | Brand managers, equipos de estrategia |
El ROI es real: una encuesta de Salesforce a 2.700 profesionales del comercio encontró que las herramientas de IA ahorran a los profesionales de e-commerce un promedio de 6,4 horas por semana. Y los vendedores que usan seguimiento automatizado de precios mantienen el Buy Box el 67% del tiempo, frente al 42% de quienes lo hacen manualmente: un aumento de ventas del 37% impulsado por reaccionar más rápido a los cambios de precio.
4 formas de extraer Amazon Best Sellers con Python: comparativa rápida
Antes de entrar en los tutoriales paso a paso, aquí tienes la comparación lado a lado que me habría encantado tener antes de empezar a probar. Esta tabla te ayudará a elegir el método adecuado para tu caso:
| Criterio | requests + BS4 | Selenium | API de scraping (p. ej., Scrape.do) | Thunderbit (sin código) |
|---|---|---|---|---|
| Dificultad de configuración | Media | Alta (driver, navegador) | Baja (API key) | Muy baja (extensión de Chrome) |
| Maneja lazy loading | No | Sí (simulación de scroll) | Sí (HTML renderizado) | Sí (la IA se encarga del renderizado) |
| Resistencia anti-bot | Baja (bloqueos de IP) | Media (detectable) | Alta (proxies rotativos) | Alta (modo nube + navegador) |
| Mantenimiento | Alto (se rompen selectores) | Alto (actualizaciones del driver + selectores) | Bajo | Muy bajo (la IA se adapta a cambios de layout) |
| Coste | Gratis | Gratis | De pago (por solicitud) | Plan gratuito + planes de pago |
| Ideal para | Extracciones puntuales, aprendizaje | Páginas con mucho JS, inicio de sesión | Escala / producción | No técnicos, investigación rápida, monitorización recurrente |
Si quieres aprender los fundamentos del scraping con Python, empieza con el método 1 o 2. Si necesitas fiabilidad a escala de producción, ve con el método 3. Si quieres resultados con un solo clic sin escribir código, salta directamente al método 4.
Antes de empezar
- Dificultad: Principiante a intermedio (según el método)
- Tiempo necesario: ~15 minutos con Thunderbit, ~45 minutos con métodos en Python
- Lo que necesitas: Python 3.8+ (para los métodos 1–3), navegador Chrome, extensión de Chrome de Thunderbit (para el método 4) y la URL de una categoría de Amazon Best Sellers
Método 1: extraer Amazon Best Sellers con requests + BeautifulSoup
Este es el enfoque ligero y apto para principiantes: sin automatización de navegador, solo peticiones HTTP y análisis de HTML. También fue el método que más me enseñó sobre las defensas anti-scraping de Amazon.
Paso 1: prepara tu entorno
Instala los paquetes necesarios:
pip install requests beautifulsoup4 pandas
Luego configura los imports:
import requests
from bs4 import BeautifulSoup
import pandas as pd
import random
import time
Paso 2: envía una solicitud con headers realistas
Amazon bloquea las solicitudes que parecen venir de bots. La defensa más básica es un header User-Agent que imita a un navegador real. Aquí tienes un snippet con un conjunto de cadenas User-Agent actuales y realistas (tomadas de Geekflare, marzo de 2026):
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 15.7; rv:149.0) Gecko/20100101 Firefox/149.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 15_7_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
]
headers = {"User-Agent": random.choice(USER_AGENTS)}
url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
response = requests.get(url, headers=headers)
print(response.status_code) # Debería ser 200
Si ves un código de estado 200, vas bien. Si ves 503 o te redirige a una página CAPTCHA, Amazon ha detectado tu solicitud.
Paso 3: analiza los datos de producto con BeautifulSoup
Inspecciona el HTML de la página de Amazon con las herramientas de desarrollo de tu navegador (clic derecho → Inspeccionar). Los contenedores de producto usan el ID gridItemRoot. Dentro de cada contenedor encontrarás el nombre del producto, el precio, la valoración y la URL.
soup = BeautifulSoup(response.text, "html.parser")
products = []
for item in soup.find_all("div", id="gridItemRoot"):
title_tag = item.find("div", class_="_cDEzb_p13n-sc-css-line-clamp-3_g3dy1")
price_tag = item.find("span", class_="_cDEzb_p13n-sc-price_3mJ9Z")
link_tag = item.find("a", class_="a-link-normal")
title = title_tag.get_text(strip=True) if title_tag else "N/A"
price = price_tag.get_text(strip=True) if price_tag else "N/A"
url = "https://www.amazon.com" + link_tag["href"] if link_tag else "N/A"
products.append({"Title": title, "Price": price, "URL": url})
Advertencia: Los nombres de clase con prefijo
_cDEzb_son hashes de módulos CSS que Amazon regenera periódicamente. El IDgridItemRooty la clasea-link-normalson más estables, pero conviene comprobar siempre los selectores con DevTools antes de ejecutar tu scraper.
Paso 4: exporta a CSV
df = pd.DataFrame(products)
df.to_csv("amazon_best_sellers.csv", index=False)
print(f"Se extrajeron {len(products)} productos")
Qué esperar — y qué sale mal
En mi prueba, este método devolvió unos 30 productos en lugar de 50. No es un fallo del código: es el lazy loading de Amazon. Solo se renderizan inicialmente unos 30 productos; el resto aparece al hacer scroll, algo que requests no puede manejar porque no ejecuta JavaScript.
Otras limitaciones:
- Los bloqueos de IP llegan rápido si no usas rotación de proxies (me bloquearon después de unas 15 solicitudes en rápida sucesión)
- Los selectores CSS se rompen cuando Amazon actualiza el diseño de la página, y lo hacen con frecuencia
- No hay manejo de paginación listo para usar
Para aprender scraping en Python, este enfoque es genial. Para uso en producción, es frágil.
Método 2: extraer Amazon Best Sellers con Selenium
Selenium resuelve el problema del lazy loading ejecutando un navegador real: requiere más configuración, pero captura los 50 productos completos por página.
Paso 1: instala Selenium
pip install selenium pandas
Buena noticia: desde Selenium 4.6+, ya no necesitas webdriver-manager. Selenium Manager se encarga automáticamente de descargar los drivers.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import pandas as pd
options = Options()
options.add_argument("--headless=new")
options.add_argument("--window-size=1920,1080")
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)
La bandera --headless=new (introducida en Chrome 109+) usa la misma canalización de renderizado que Chrome con interfaz, lo que hace que Amazon lo detecte con más dificultad.
Paso 2: desplázate más allá del lazy loading
Este es el paso que hace que Selenium merezca la pena. Amazon Best Sellers solo carga inicialmente unos 30 productos; el resto aparece después de hacer scroll.
def scroll_page(driver, scrolls=5, delay=2):
for _ in range(scrolls):
driver.find_element(By.TAG_NAME, "body").send_keys(Keys.PAGE_DOWN)
time.sleep(delay)
driver.get("https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/")
time.sleep(3)
scroll_page(driver)
Después de desplazarte, los 50 productos deberían estar renderizados en el DOM. Encontré que 5 desplazamientos con tecla Page Down y una pausa de 2 segundos eran suficientes, aunque quizá tengas que ajustarlo según la velocidad de tu conexión.
Paso 3: extrae los datos del producto
items = driver.find_elements(By.ID, "gridItemRoot")
products = []
for item in items:
try:
title = item.find_element(By.CSS_SELECTOR, "div._cDEzb_p13n-sc-css-line-clamp-3_g3dy1").text
except:
title = "N/A"
try:
price = item.find_element(By.CSS_SELECTOR, "span._cDEzb_p13n-sc-price_3mJ9Z").text
except:
price = "N/A"
try:
url = item.find_element(By.CSS_SELECTOR, "a.a-link-normal").get_attribute("href")
except:
url = "N/A"
products.append({"Title": title, "Price": price, "URL": url})
Es importante envolver cada extracción en try/except: algunos productos pueden no tener stock o carecer de ciertos campos, y no querrás que un solo elemento defectuoso rompa toda la extracción.
Paso 4: maneja la paginación
Amazon divide los 100 Best Sellers en dos páginas con estructuras de URL distintas:
urls = [
"https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/",
"https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/ref=zg_bs_pg_2_electronics?_encoding=UTF8&pg=2"
]
all_products = []
for url in urls:
driver.get(url)
time.sleep(3)
scroll_page(driver)
# ... extrae los productos como arriba ...
all_products.extend(products)
driver.quit()
Qué esperar
En mi prueba, Selenium capturó los 50 productos por página: una victoria clara frente a requests + BS4. La desventaja: tardó unos 45 segundos por página (incluyendo las pausas de scroll) y aun así me marcaron después de ejecutarlo demasiadas veces sin rotación de proxies. Amazon también puede detectar Selenium con sus defensas anti-bot, incluso usando banderas anti-detección; para una escala seria, necesitarás medidas adicionales (mira el playbook anti-bloqueo más abajo).
Otros problemas:
- Aún pueden darse desajustes entre versiones de WebDriver, aunque Selenium Manager lo ha reducido mucho
- Los selectores CSS necesitan actualizarse cada vez que Amazon cambia el DOM
- El consumo de memoria es alto: cada instancia del navegador consume entre 200 y 400 MB de RAM
Método 3: extraer Amazon Best Sellers con una API de scraping
Las APIs de scraping son el enfoque de "que se encargue otro de lo difícil". Servicios como Scrape.do, Oxylabs y ScrapingBee gestionan la rotación de proxies, el renderizado de JavaScript y las medidas anti-bot; tú solo envías una URL y recibes HTML o JSON.
Cómo funciona
Envías la URL de destino al endpoint de la API. La API renderiza la página usando un navegador real en su infraestructura, rota proxies, gestiona CAPTCHA y devuelve HTML limpio. Después analizas ese HTML devuelto con BeautifulSoup como siempre.
Paso 1: envía una solicitud a través de la API
Aquí tienes un ejemplo usando Scrape.do (los precios empiezan en $29/mes por 150.000 créditos, 1 crédito = 1 solicitud independientemente del renderizado):
import requests
from bs4 import BeautifulSoup
api_token = "YOUR_API_TOKEN"
target_url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
api_url = f"https://api.scrape.do?token={api_token}&url={target_url}&render=true&geoCode=us"
response = requests.get(api_url)
soup = BeautifulSoup(response.text, "html.parser")
A partir de aquí, el análisis es idéntico al del Método 1: mismos selectores, misma lógica de extracción.
Revisión de precios realista
Esto es lo que cobran las principales APIs por cada 1.000 solicitudes a Amazon en su mejor tarifa disponible:
| Proveedor | Coste por 1.000 solicitudes | Notas |
|---|---|---|
| Scrape.do | ~$0,19 | Tarifa fija, sin multiplicadores de créditos |
| Oxylabs | ~$1,80 | Multiplicador x5 para renderizado JS |
| ScrapingBee | ~$4,90 | Multiplicadores x5 a x25 para funciones premium |
| Bright Data | ~$5,00+ | Datos más completos (686 campos/producto) pero más lento (~66 s/solicitud) |
Pros y contras
Pros: Alta fiabilidad (~99% de tasa de éxito en Amazon para los proveedores principales), sin mantenimiento de drivers, maneja el anti-bot automáticamente y escala bien.
Contras: Pagas por solicitud y los costes se disparan a gran escala, sigues necesitando escribir código de parsing y aún eres vulnerable a cambios en los selectores CSS. Para 100.000 páginas al mes, la comparación total de costes es contundente: construirlo internamente cuesta aproximadamente $1,98M en tres años frente a $332K con un proveedor de API, un ahorro del 71%.
El punto de equilibrio suele estar entre 500K y 1M solicitudes al mes. Por debajo de eso, el ahorro de tiempo de una API compensa con creces el coste.
Método 4: extraer Amazon Best Sellers con Thunderbit (sin Python)
Transparencia total: trabajo en Thunderbit, así que toma esta sección con ese contexto. Dicho esto, probé de verdad los cuatro métodos uno detrás de otro, y la diferencia en velocidad para obtener los datos fue enorme.
Thunderbit es un AI web scraper que funciona como extensión de Chrome. La idea central es simple: en lugar de escribir selectores CSS o código Python, la IA lee la página y decide qué datos extraer. En el caso concreto de Amazon Best Sellers, Thunderbit tiene plantillas preconstruidas que funcionan con un solo clic.
Paso 1: instala la extensión de Chrome de Thunderbit
Ve a la Chrome Web Store y haz clic en "Añadir a Chrome". Crea una cuenta gratuita: el plan gratis te da suficientes créditos para probarlo.
Paso 2: abre la página de Amazon Best Sellers
Abre cualquier página de categoría de Amazon Best Sellers en Chrome. Por ejemplo:
https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/
Paso 3: haz clic en "One Click Extract"
Abre la barra lateral de Thunderbit y haz clic en "One Click Extract". La IA analiza la estructura de la página y detecta las columnas: nombre del producto, precio, valoración, URL de la imagen, vendedor, URL del producto y ranking. En mi prueba, identificó correctamente todos los campos relevantes en unos 3 segundos.

Puedes cambiar el nombre de las columnas, eliminarlas o añadir nuevas. Incluso puedes añadir prompts personalizados de IA por campo; por ejemplo, "clasificar como Electronics/Apparel/Home" para añadir una etiqueta de categoría a cada producto.
Paso 4: haz clic en "Scrape"
Pulsa el botón "Scrape". Thunderbit rellena una tabla estructurada con todos los datos del producto de la página. En modo cloud, procesa hasta 50 páginas a la vez en paralelo, gestionando automáticamente el lazy loading y la paginación.
Paso 5: exporta gratis
Haz clic en "Export" y elige tu destino: Excel, Google Sheets, Airtable o Notion. Todas las exportaciones son gratis en todos los planes, sin cargos ocultos.

Todo el proceso me llevó unos 90 segundos desde abrir la página hasta tener una hoja de cálculo completa. Para comparar, el método 1 me tomó unos 20 minutos (incluida la depuración del problema de lazy loading), el método 2 unos 35 minutos (incluida la configuración de Selenium) y el método 3 unos 15 minutos (incluida la creación de la cuenta en la API).
Por qué Thunderbit funciona bien con Amazon
Como la IA relee la página desde cero cada vez, se adapta automáticamente a los cambios de diseño: no hay selectores CSS que mantener. Esto responde directamente a la queja más común en los foros de scraping: "un scraper web básico no basta, hay que añadir un montón de ‘capturas’ para los cambios de elementos". Cuando Amazon cambia su DOM, no tienes que actualizar nada.
El modo de scraping en la nube gestiona de forma transparente la rotación de proxies, el renderizado y las medidas anti-bot. Para quienes quieren una solución de "simplemente funciona", esto elimina por completo el dolor de cabeza de los bloqueos.
Olvídate del mantenimiento de selectores Cuando Amazon cambia su marcado, tus selectores de BeautifulSoup se rompen. La IA de Thunderbit vuelve a leer la página en cada ejecución y detecta los campos de nuevo. Get Started Free
El playbook anti-bloqueo: cómo evitar que Amazon te bloquee
La detección de bots de Amazon es agresiva. Durante las pruebas me bloquearon temporalmente la IP, y los usuarios de foros reportan lo mismo: "errores por todas partes, Amazon incluso empezó a redirigirme a la página principal". Si vas por la ruta de Python (métodos 1–3), esta sección es fundamental.
Aquí tienes una estrategia por capas, de lo básico a lo avanzado:
1. Rota las cadenas User-Agent
Enviar siempre el mismo User-Agent es una señal de alerta. Usa el grupo de 5+ cadenas del ejemplo del Método 1 y selecciona una aleatoria en cada solicitud:
headers = {"User-Agent": random.choice(USER_AGENTS)}
2. añade pausas aleatorias entre solicitudes
Las pausas fijas son detectables por patrón. Las aleatorias son más seguras:
time.sleep(random.uniform(2, 5))
Descubrí que entre 2 y 5 segundos entre solicitudes me mantenían fuera del radar en lotes pequeños (menos de 50 solicitudes). Para ejecuciones más grandes, súbelo a 3–7 segundos.
3. usa rotación de proxies
Este es el punto clave. Los benchmarks de Proxyway muestran que los proxies residenciales tienen una media de éxito de ~94% en Amazon frente a ~59% para proxies de centros de datos: una diferencia de 35 puntos porcentuales. El sistema de detección de Amazon incluye fingerprinting TLS, análisis de comportamiento y limitación por IP, así que las IP estándar de datacenter se marcan en segundos.
Los proxies residenciales son más caros ($2–$12 por GB según el proveedor), pero mucho más fiables. Ejemplo de código:
proxies = {
"http": "http://user:pass@residential-proxy.example.com:8080",
"https": "http://user:pass@residential-proxy.example.com:8080"
}
response = requests.get(url, headers=headers, proxies=proxies)
4. refuerza la huella del navegador (Selenium)
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
# Después de iniciar el driver, elimina la marca navigator.webdriver
driver.execute_cdp_command('Page.addScriptToEvaluateOnNewDocument', {
'source': "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})
5. gestiona sesiones y cookies
Persistir cookies entre solicitudes hace que tu scraper parezca más una sesión de usuario real:
session = requests.Session()
# Visita primero la página principal para obtener cookies realistas
session.get("https://www.amazon.com", headers=headers)
time.sleep(2)
# Luego extrae la página objetivo
response = session.get(target_url, headers=headers)
6. cuándo saltarte todo el dolor de cabeza
Para quienes no quieren gestionar nada de esto, el scraping en la nube de Thunderbit maneja la rotación de proxies, el renderizado y las medidas anti-bot de forma transparente. Las APIs de scraping también cubren la mayoría de estas preocupaciones de serie. En mi experiencia, el tiempo que se invierte depurando problemas anti-bloqueo suele superar al tiempo invertido en escribir el código de scraping; por eso la opción de "simplemente funciona" tiene un ROI real.
Enriquecimiento de subpáginas: extraer las páginas de detalle para obtener más datos
La página de listado de Best Sellers solo muestra información básica: título, precio, valoración y ranking. Pero el verdadero valor para la investigación FBA está en las páginas de detalle de cada producto. Esto es lo que te pierdes si solo extraes el listado:
| Campo | Página de listado | Página de detalle del producto |
|---|---|---|
| Nombre del producto | ✅ | ✅ |
| Precio | ✅ | ✅ |
| Valoración | ✅ | ✅ |
| Ranking BSR | ✅ | ✅ (con rankings por subcategoría) |
| Marca | ❌ | ✅ |
| ASIN | ❌ | ✅ |
| Fecha de primera disponibilidad | ❌ | ✅ |
| Dimensiones/Peso | ❌ | ✅ |
| Número de vendedores | ❌ | ✅ |
| Características en viñetas | ❌ | ✅ |
| Propietario del Buy Box | ❌ | ✅ |
Ese campo de "Fecha de primera disponibilidad" es especialmente valioso: te dice cuánto tiempo lleva un producto en el mercado, una señal clave para el análisis de competencia. Y conocer el número de vendedores y el propietario del Buy Box ayuda a evaluar si merece la pena entrar en un nicho (si Amazon mismo tiene más del 30% de cuota del Buy Box, competir es extremadamente difícil).
Enfoque Python: recorrer las URLs de producto
Después de recopilar las URLs de producto desde la página de listado, recorre cada una con una pausa:
for product in products:
time.sleep(random.uniform(3, 6))
detail_response = session.get(product["URL"], headers={"User-Agent": random.choice(USER_AGENTS)})
detail_soup = BeautifulSoup(detail_response.text, "html.parser")
# Extraer marca
brand_tag = detail_soup.find("a", id="bylineInfo")
product["Brand"] = brand_tag.get_text(strip=True) if brand_tag else "N/A"
# Extraer ASIN del código fuente o de la URL
# Extraer fecha de primera disponibilidad de la tabla de detalles
# ... campos adicionales ...
Aviso: visitar 100 páginas de producto individuales aumenta mucho el riesgo de bloqueo. Debes presupuestar rotación de proxies y pausas más largas.
Enfoque Thunderbit: scraping de subpáginas con un clic
Después de extraer la página de listado a una tabla, haz clic en "Scrape Subpages" en Thunderbit. La IA visita cada URL de producto y enriquece la tabla con columnas adicionales —marca, ASIN, especificaciones, características— automáticamente. Sin código adicional, sin selectores y sin configuración. Esto es especialmente útil para equipos de e-commerce que necesitan la imagen completa para tomar decisiones de sourcing, pero no quieren escribir ni mantener un parser de páginas de detalle.
Automatizar extracciones recurrentes: monitorizar Best Sellers a lo largo del tiempo
Una extracción puntual es útil, pero el seguimiento continuo es donde aparece la verdadera ventaja competitiva. Vigilar qué productos suben y bajan, detectar tendencias temprano y seguir los cambios de precio durante semanas o meses: eso es lo que separa una investigación casual de una toma de decisiones basada en datos.
Enfoque Python: programar con Cron
En Linux/Mac, puedes programar tu script de Python con cron. Aquí tienes la entrada crontab para una extracción diaria a las 8:00:
0 8 * * * /usr/bin/python3 /home/user/amazon_scraper.py >> /home/user/logs/scrape.log 2>&1
Para una extracción semanal los lunes a las 9:00:
0 9 * * 1 /usr/bin/python3 /home/user/amazon_scraper.py >> /home/user/logs/scrape.log 2>&1
En Windows, usa el Programador de tareas para hacer lo mismo. Si quieres una programación siempre activa sin dejar el portátil encendido, despliega en una VPS o en AWS Lambda, aunque eso añade complejidad de infraestructura.
Añade registro de logs y notificaciones de errores para detectar ejecuciones fallidas. No hay nada peor que descubrir que tu scraper se rompió en silencio hace dos semanas.
Enfoque Thunderbit: Scheduled Scraper en lenguaje natural
El Scheduled Scraper de Thunderbit te permite describir el intervalo en lenguaje natural: escribe "cada lunes a las 9am" o "todos los días a las 8am" y la IA interpreta la programación. Las extracciones se ejecutan en los servidores en la nube de Thunderbit (no hace falta que haya navegador ni ordenador encendido), y los datos se exportan automáticamente a Google Sheets o Airtable. Esto crea un panel de monitorización en vivo sin gestionar servidores, ideal para equipos de operaciones que quieren visibilidad continua sin carga de DevOps.
Consideraciones legales y éticas al extraer datos de Amazon
No soy abogado y esto no es asesoramiento legal. Pero ignorar el panorama legal en un tutorial de scraping sería irresponsable: los usuarios de foros plantean explícitamente dudas sobre los Términos de Servicio, y con razón.
robots.txt de Amazon: A fecha de 2026, el robots.txt de Amazon contiene más de 80 rutas específicas prohibidas, pero /gp/bestsellers/ NO está bloqueada explícitamente para los agentes de usuario estándar. Sin embargo, más de 35 agentes de usuario específicos de IA (ClaudeBot, GPTBot, Scrapy, etc.) reciben un Disallow: / general. La ausencia de una prohibición concreta no significa que Amazon apruebe el scraping.
Términos de servicio de Amazon: Las Conditions of Use de Amazon (actualizadas en mayo de 2025) prohíben explícitamente "usar cualquier proceso o tecnología automatizada para acceder, adquirir, copiar o monitorizar cualquier parte del sitio web de Amazon" sin permiso por escrito. No es algo teórico: Amazon demandó a Perplexity AI en noviembre de 2025 por acceso automatizado no autorizado y obtuvo una orden judicial preliminar.
El precedente hiQ v. LinkedIn: En hiQ Labs v. LinkedIn (Noveno Circuito, 2022), el tribunal sostuvo que extraer datos disponibles públicamente probablemente no viola la Computer Fraud and Abuse Act. Pero hiQ acabó llegando a un acuerdo y aceptó dejar de hacer scraping: ganar bajo la CFAA no te protege de reclamaciones por incumplimiento contractual.
Pautas prácticas:
- Extrae solo datos públicamente disponibles (precios, BSR, títulos de producto, no datos personales)
- Respeta los límites de tasa y no satures los servidores
- Usa los datos para inteligencia competitiva legítima
- Consulta a tu propio asesor legal antes de extraer datos a gran escala
- Ten en cuenta que más de 20 estados de EE. UU. ya tienen legislación integral de privacidad
El scraping en la nube de Thunderbit utiliza patrones de solicitud estándar similares a los de un navegador, pero siempre debes verificar el cumplimiento con tu propio asesor legal.
Para esto no necesitas Python Si el objetivo es una hoja de cálculo y no una tubería de datos, un clic te lleva allí. Exporta directamente a Excel, Google Sheets, Airtable o Notion. Get Started Free
¿Qué método deberías usar? Guía rápida de decisión
La versión corta:
- "Estoy aprendiendo Python y quiero un proyecto de fin de semana." → Método 1 (requests + BeautifulSoup). Aprenderás muchísimo sobre peticiones HTTP, análisis de HTML y defensas anti-bot de Amazon.
- "Necesito extraer páginas con mucho JavaScript o sesiones iniciadas." → Método 2 (Selenium). Es más pesado, pero maneja contenido dinámico.
- "Estoy ejecutando extracciones de producción a gran escala." → Método 3 (API de scraping). Deja que otro gestione proxies y renderizado. El coste total de propiedad favorece a las APIs por debajo de 500K solicitudes al mes.
- "No soy desarrollador y quiero los datos en 2 minutos." → Método 4 (Thunderbit). Sin código, sin selectores, sin mantenimiento.
- "Necesito monitorización continua sin gestionar servidores." → Scheduled Scraper de Thunderbit. Configúralo y olvídate.
Prueba Thunderbit para Amazon Best Sellers Get Started Free
Conclusión y aprendizajes clave
Después de un fin de semana de pruebas, esto fue lo que realmente me quedó claro:
requests + BeautifulSoup es genial para aprender, pero la limitación del lazy loading (solo unos 30 de 50 productos) y unos selectores CSS frágiles lo hacen poco práctico para producción.
Selenium soluciona el problema del lazy loading y captura los 50 productos por página, pero es lento, consume mucha memoria y Amazon aún puede detectarlo.
Las APIs de scraping ofrecen la mejor fiabilidad para scraping a escala de producción —~99% de éxito en Amazon—, pero el coste aumenta y todavía tienes que escribir el código de parsing.
Thunderbit ofreció, con mucha diferencia, el tiempo más rápido para obtener datos. La IA gestiona cambios de layout, lazy loading, paginación y medidas anti-bot sin necesidad de configuración. Para usuarios no técnicos o equipos que necesitan datos recurrentes sin carga de DevOps, es la opción más práctica.
¿La mayor lección? Las defensas anti-bot de Amazon y sus frecuentes cambios de diseño hacen que, a largo plazo, las soluciones sin mantenimiento ahorren más tiempo. Cada hora que pasas depurando selectores rotos y rotando proxies es una hora que no estás dedicando al análisis real.
¿Quieres probar el enfoque sin código? El plan gratuito de Thunderbit te da suficientes créditos para extraer unas cuantas categorías de Best Sellers y ver los resultados por ti mismo. ¿Prefieres la ruta de Python? Los ejemplos de código de arriba deberían servirte como punto de partida. En cualquier caso, tendrás los datos de Amazon Best Sellers en una hoja de cálculo en lugar de estar mirando una pestaña del navegador.
Para saber más sobre enfoques de web scraping, consulta nuestras guías sobre extraer productos y reseñas de Amazon, extraer datos de sitios web a Excel y los mejores AI web scrapers. También puedes ver tutoriales paso a paso en el canal de YouTube de Thunderbit.
Más información


