84 estrellas en GitHub y la cifra sigue aumentando. Yozh Crawler + Scraper es gratuito, de código abierto y se desarrolla de forma pública; danos una estrella si se gana un hueco en tu pila de herramientas.
CyberYozh Data / Casos de uso / Comercio electrónico y plataformas de venta
Caso de uso · Comercio electrónico

Un único esquema. Todos los mercados

Envía la URL de cualquier producto —Amazon, eBay, Walmart, AliExpress o más de 20 plataformas más— y obtén como respuesta el mismo JSON estructurado y limpio. Sin selectores que mantener, sin lucha contra los bots, sin procesos frágiles.

$curl -X POST localhost:8000/api/v1/scrape/page \ -d '{"url":"amazon.com/dp/B0CFFXRFTH"}'
amazon.com/dp/B0CFFXRFTH
scrape_page amazon.com
Fetching product page
Bypassing anti-bot
Extracting JSON-LD + DOM
Normalizing variants
Resolving images
Funciona en estos mercados
Por qué fallan los rastreadores genéricos

Las plataformas de mercado acaban con los rastreadores «universales» en un trimestre

Las plataformas de comercio electrónico lanzan actualizaciones de diseño cada pocas semanas, implementan sistemas antibots de varias capas, protegen el «Buy Box» y los datos de los vendedores mediante sesiones, y muestran una estructura de campos diferente en cada configuración regional. La mayoría de los equipos dedican el 80 % de su tiempo a mantener el rastreador en funcionamiento y el 20 % a los datos en sí. Nosotros ofrecemos las cuatro cosas que ellos acaban reconstruyendo desde cero.

Si alguna vez te has encontrado con un panel de control repleto de nulls tras un rediseño del marketplace, esto va para ti.

Los selectores interrumpen cada cambio de diseño

El problema. Los rastreadores genéricos envían una ruta CSS o XPath y cruzan los dedos. Cuando una plataforma de comercio electrónico rediseña una página de detalles del producto (PDP) —Amazon lo hace cada pocas semanas—, tu proceso devuelve nullen el entorno de producción. Te enteras horas más tarde a través de un panel de BI posterior.

Cómo lo soluciona Yozh Scraper. Se pasa llm: {model: "..."} la solicitud y el analizador pide a Anthropic / OpenAI / Gemini / OpenRouter que vuelva a generar el selector a partir del DOM en tiempo real. El pipeline sigue ejecutándose con un self_heal: true indicador en la respuesta — sin que se active la alerta de guardia.

  • Autorreparación de LLM
  • Multiproveedor
  • Sin interrupciones en el servicio

Una dirección IP, cinco solicitudes, bloqueo

El problema. Los proxies de los centros de datos se agotan en una sola sesión. Los bloqueos CAPTCHA, el análisis de huellas digitales TLS y los retos de JavaScript detectan los navegadores sin interfaz gráfica en cuestión de segundos. La mayoría de los equipos crean una capa de rotación de proxies desde cero y, aun así, siguen siendo bloqueados.

Cómo lo soluciona Yozh Scraper. Integración nativa con CyberYozh App Proxy a través de CYBERYOZH_API_KEY — 5 tipos de proxy (residencial rotativo/fijo, móvil 4G/5G, centro de datos, ISP) en 250 códigos de país. La versión sigilosa de Chromium con huella digital «warm» se adapta automáticamente al origen del proxy.

  • 5 tipos de proxy
  • 250 códigos de país
  • Huella digital caliente

Forma de campo diferente según el mercado

El problema. El precio de Amazon está en una tabla, el de eBay en otra y el de Walmart en una tercera. Los paneles de control que abarcan varios mercados necesitan una capa de normalización antes de que se publique la primera métrica. Los equipos dedican semanas a armonizar los formatos de los campos.

Cómo lo soluciona Yozh Scraper. 10 preajustes integrados que src/presets/builtin/ devuelven un JSON idéntico en Amazon, eBay, Walmart y Google Shopping. Las mismas claves: title, price, currency, in_stock, rating. Análisis de divisas adaptado a la configuración regional: la estructura se mantiene igual.

  • 10 preajustes
  • La misma estructura JSON
  • Moneda adaptada a la configuración regional

Páginas de inicio de sesión y sesiones caducadas

El problema. Los datos vinculados a la cuenta —el ganador de la Buy Box, los portales de socios, los administradores internos, las fuentes de perfiles al estilo de LinkedIn— requieren iniciar sesión. El almacenamiento de cookies personalizado deja de funcionar al volver a iniciar sesión. La mayoría de los rastreadores ni siquiera incluyen gestión de sesiones.

Cómo lo soluciona Yozh Scraper. API de sesiones con un lenguaje de programación declarativo (DSL) para el inicio de sesión (goto / fill / click / wait) o pegar cookies exportadas. Reutilización session_id en todos los rastreos: las cookies y el «storageState» persisten durante 24 horas y se actualizan sobre la marcha. Es obligatorio para la configuración predefinida de LinkedIn y es compatible con todas las demás.

  • Inicio de sesión declarativo
  • Cookie + estado de almacenamiento
  • TTL de 24 horas
Cómo funciona

De una URL a un JSON estructurado en 3 llamadas

No hay que escribir selectores. Elige un ajuste predefinido, introduce los parámetros y analiza la respuesta. El mismo proceso funciona para todas las plataformas compatibles.

1 Poner en marcha

Clona el repositorio y docker compose up. Se inician dos servicios: el scraper en :8000, el rastreador en :8001.

# one-time setup
git clone \
  github.com/CyberYozh-data/yozh-scraper
cd yozh-scraper
docker compose up -d
2 Activar un preajuste

PUBLICA el nombre de un preset junto con sus parámetros. Sin selectores ni ajustes anti-bot: el paquete de presets se encarga de analizar los selectores, la configuración regional y la moneda.

curl \
  localhost:8000/api/v1/scrape/preset/page \
  -X POST \
  -d '{"source": "amazon_product",
       "preset_params": {"asin": "B0CFFXRFTH"},
       "locale": "us"}'
3 Obtener JSON estructurado

La misma forma en todas las regiones. Si un selector deja de funcionar tras un cambio de diseño, la autorreparación del LLM lo regenera sobre la marcha; el proceso continúa sin interrupciones.

{
  "asin":       "B0CFFXRFTH",
  "price":      189.99,
  "currency":   "USD",
  "in_stock":   true,
  "rating":     4.7
}
Ejemplo en vivo

Lo que obtienes a cambio: un único formato, para todos los mercados

Elige un ajuste preestablecido para ver cómo es la respuesta. El conjunto de campos varía según la fuente, pero la estructura de la solicitud es idéntica.


            
Recetas

Cómo lo plantean los equipos: en 10 líneas cada uno

Tres configuraciones concretas de comercio electrónico, listas para copiar y pegar. No se incluye ningún programador; utiliza tu propio cron, Airflow o Temporal.

1 Resumen diario de precios

Procesa por lotes la lista de ASIN de la competencia una vez al día, compara los cambios con los de ayer y publica los cambios en Slack. Cron se encarga del resto.

# crontab: every day at 06:00
0 6 * * * /usr/local/bin/price-watch.sh

# price-watch.sh
curl -X POST localhost:8000/api/v1/scrape/preset/pages \
  -d "@asins.json" \
| jq '.results[] | {asin, price, in_stock}' \
> today.json

diff yesterday.json today.json | slack-cli post #pricing
mv today.json yesterday.json
200 URL por lote unos 30 segundos por trabajador tu cron
2 Detección de nuevos productos

Realizar un rastreo diario de una página de categorías y eliminar las URL de productos duplicadas con respecto a las de ayer. Activar un webhook para las novedades antes de que la competencia las indexe.

# start a crawl of the category
curl -X POST localhost:8001/api/v1/crawl/start \
  -d '{"seed_url":"amazon.com/s?k=ssd",
       "max_pages":300,
       "scope":"same-domain"}' \
| jq -r '.urls[]' > today_urls.txt

# urls that appeared today
comm -13 yesterday_urls.txt today_urls.txt \
| curl -X POST $WEBHOOK_URL -d @-
Curso de SSE deduplicación por trabajo (SHA1) scope + rate-limit
3 Fuente de usuarios conectados · sesiones

Extraer páginas que requieren iniciar sesión (LinkedIn, portales de socios, administradores internos). Iniciar sesión una vez a través de la API de sesiones y, a continuación, reutilizar session_id en cada rastreo.

# 1. log in once via declarative script
SID=$(curl -X POST \
  localhost:8000/api/v1/sessions/$ID/login \
  -d "@login_script.json" \
  | jq -r .session_id)

# 2. reuse for every scrape · cookies persist 24h
curl -X POST localhost:8000/api/v1/scrape/preset/page \
  -d "{\"source\":\"linkedin_profile\",
       \"preset_params\":{\"slug\":\"satyanadella\"},
       \"session_id\":\"$SID\"}"
TTL de 24 horas cookie + estado de almacenamiento CAPTCHA: pegar galletas
FAQ

Preguntas frecuentes sobre los datos del mercado

¿Con qué plataformas de venta online trabajáis?
10 preajustes integrados que src/presets/builtin/ que abarcan las principales fuentes de datos: amazon_product (EE. UU., Reino Unido, Alemania, Francia, Japón), amazon_search (EE. UU., Reino Unido, Alemania), ebay_search (EE. UU., Reino Unido, Alemania), walmart_product (EE. UU.), google_search (EE. UU., Reino Unido, Alemania, Francia, Rusia, Japón), google_shopping (EE. UU., Reino Unido, Alemania), bing_search (EE. UU., Reino Unido, Alemania, Francia, Rusia, Japón), yandex_search (EE. UU., Reino Unido, Alemania, Francia, Rusia, Japón), youtube_video (global), linkedin_profile (global, requiere session_id). ¿Necesitas algo más? Utiliza POST /api/v1/presets/generate con una URL de ejemplo: un modelo de lenguaje grande (LLM) deducirá el esquema y generará los selectores por ti.
¿Qué grado de estabilidad tiene el esquema?
La misma estructura de campos en todas las regiones y configuraciones predefinidas — amazon_product en .us, .uk, .de, .fr y .jp se devuelven claves idénticas (moneda localizada, estructura sin cambios). Los campos opcionales son explícitamente nulos, por lo que los valores que falten nunca afectarán a tu analizador. Cuando un mercado cambia de diseño, la autorreparación de LLM regenera el selector sobre la marcha (indícalo llm: {model: "..."} en la solicitud)—; el proceso sigue ejecutándose con un self_heal: true indicador en la respuesta. Los cambios que rompen la compatibilidad solo se lanzan en versiones menores con notas de migración en CHANGELOG.md.
¿Puedo extraer datos de Amazon, eBay o Walmart?
Sí, los tres son ajustes predefinidos de primera clase, sin necesidad de configuración adicional. Amazon ofrece datos para cinco mercados regionales (us, uk, de, fr, jp) en las páginas de detalles del producto (PDP) y en la búsqueda; eBay cubre la búsqueda en us, uk y de; y Walmart .us, las páginas de productos. Cada uno devuelve el mismo formato JSON: title, price, currency, in_stock, rating, seller, además de campos específicos de cada mercado cuando existan (ASIN, ganador de la Buy Box, indicador de anuncio patrocinado). Para los datos vinculados a la cuenta tras iniciar sesión (precios de Prime, portales de socios), utiliza la API de sesiones y envía session_id con la solicitud.
¿En cuánto tiempo podré disponer de los primeros datos?
Aproximadamente 5 minutos de principio a fin. git clone + docker compose up -d Pone en marcha el scraper en unos 30 segundos (Docker descarga la imagen una vez). En primer lugar curl POST /api/v1/scrape/preset/page devuelve datos JSON estructurados en 1–3 segundos para las configuraciones regionales almacenadas en caché, y en un máximo de 5–8 segundos si se inicia en frío. Sin necesidad de registrarse, sin crear claves API, sin medición de uso de SaaS: accedes al punto final localhost:8000 en cuanto el contenedor esté operativo.
¿Os ocupáis de los proxies y de la protección contra bots?
Sí. El scraper se integra con el CyberYozh App Proxy a través de CYBERYOZH_API_KEY — 5 tipos de proxy en 250 códigos de país (residencial rotativo/fijo, móvil 4G/5G, centro de datos, ISP). La protección antibot se gestiona mediante una versión de Chromium sigilosa con huella digital «caliente», que se adapta al proxy residencial y con tiempos de respuesta similares a los de un humano; la mayoría de los flujos evitan por completo el CAPTCHA. Cuando aparece un CAPTCHA, el rastreador lo devuelve como un error estructurado en lugar de resolverlo de forma silenciosa. Regla general: proxies residenciales rotativos para el rastreo a escala de catálogo; móviles para zonas con protección antibot agresiva o tareas vinculadas a cuentas.
Código abierto · Licencia MIT · 84 ★

¿Estás listo para extraer datos de los mercados online?

Yozh Scraper es compatible con Amazon, eBay, Walmart y Google Shopping desde el primer momento. Gratis. Para siempre. Danos una estrella si te resulta útil: cada estrella cuenta.

Yozh Crawler + Scraper se distribuye bajo la licencia MIT. Úsalo. Haz un fork. Desarrolla con él.

Apreciado por los equipos de datos y los desarrolladores de IA

Lo que dicen quienes crean con Yozh

5,0 / 5 · Reseña de 5
GitHub
En una sola tarde cambiamos nuestro clúster interno de Playwright por Yozh. El punto final de MCP se integró directamente en nuestro agente Claude: sin necesidad de código de enlace, el rastreador y el extractor funcionaron a la primera.
Marcus Reinhardt Ingeniero jefe de datos Northwind Analytics
X
El sistema de preajustes es la característica estrella. Introducimos el nombre de una fuente y obtenemos un JSON limpio; la función de autocorrección incluso detectó dos cambios en el diseño de Amazon antes de que nos diéramos cuenta.
Priya Nair Fundador ScrapeStack
Reddit
Por fin, un rastreador de código abierto que trata los proxies y las sesiones como elementos de primer orden. Lo ejecutamos tras las barreras de inicio de sesión de los portales de nuestros socios: las sesiones se mantienen y los resultados son coherentes en todas las regiones.
Daniel Osei Ingeniero de backend Loopfeed
X
Lo he conectado a Cursor a través de MCP y ahora mi agente extrae datos web en tiempo real mientras realiza la tarea. El rastreo en tiempo real a través de SSE es justo lo que les faltaba a los flujos de trabajo de los agentes.
Elena Kovac Ingeniero de IA Vektor Labs
GitHub
Dejamos de utilizar una API de extracción de datos de pago para reducir costes y nos preparamos para un empeoramiento del servicio, pero ocurrió todo lo contrario. Es autohospedada, no hay facturación por solicitud y el esquema de salida es más claro que el que solíamos pagar.
Sofia Almeida Jefe de Ingeniería Tabbly