Tony Wang7 min de lecturaCómo scrapear Wish en 2026 (API y Python)
Scrapea Wish en 2026 — búsqueda y detalle de producto con precios, variaciones y merchant en JSON — DIY, no-code o API estructurada.
La forma más rápida de scrapear Wish en 2026 es llamar a una API estructurada que devuelve JSON normalizado para búsqueda de productos por palabra clave y detalle completo por producto — en lugar de parsear las propias páginas de Wish. Wish (operado por ContextLogic Inc.) es un animal distinto a un retailer directo como Costco o Target: es un marketplace de descuento construido sobre merchants de terceros, precios ultra bajos y tiempos de envío largos desde vendedores mayoritariamente extranjeros, lo que significa que el mismo producto puede aparecer bajo varios merchants a varios precios. Esta guía cubre Python DIY, herramientas no-code, y una API estructurada de Wish, además de qué puedes recolectar realmente y los aspectos legales básicos.
¿Por qué scrapear Wish?
- Comparación de precios entre merchants — el modelo de marketplace de Wish implica que el mismo producto puede estar listado por más de un merchant a precios distintos; extraer resultados de búsqueda y detalle de producto te permite alinearlos lado a lado en lugar de confiar en un solo listing.
- Investigación de precios de descuento — rastrea cómo se mueven los precios en un marketplace construido en torno al posicionamiento agresivo de precios bajos, por categorías o temas de palabras clave.
- Seguimiento de variaciones e inventario — cada combinación comprable de talla/color/merchant lleva su propio precio, moneda e inventario, así que puedes observar cómo una variación específica varía o se agota de forma independiente al resto del listing.
- Monitoreo de valoración y reseñas — extrae la valoración agregada y el número de reseñas de un producto para investigación de sentimiento o señales de calidad a lo largo del tiempo.
- Pipelines y agentes de IA — alimenta JSON normalizado de búsqueda y detalle a un agente de sourcing o comparación de precios en lugar de hacer screen-scraping de tarjetas de producto.
¿Es legal scrapear Wish?
Opción 1: DIY en Python (y por qué se rompe)
Un scraper ingenuo obtiene una página de búsqueda o de producto e intenta parsear las tarjetas de listing a partir del markup renderizado:
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://www.wish.com/search/wireless%20earbuds",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Product cards, pricing, and variations render from client-side app
# state rather than stable server HTML, so a plain HTML parse mostly
# returns an empty shell
Funciona una vez en la demo, y luego se rompe:
- Los ids de producto no son adivinables. Un id de producto de Wish es una cadena hexadecimal de 24 caracteres — solo obtienes uno fiable del campo
product_idde un resultado de búsqueda o extrayéndolo de la URL de una página de producto, no de selectores CSS que cambian con cada rediseño. - Estado de app renderizado en cliente. Los resultados de búsqueda y el detalle de producto — incluido el desglose de precio/moneda/inventario/merchant por variación — se renderizan a partir de estado de JavaScript, no de markup que puedas seleccionar de forma fiable.
- Las variaciones están anidadas, no planas. Un solo producto puede llevar muchas combinaciones comprables de talla/color/merchant, cada una con su propio precio e inventario — parsear eso correctamente a partir del HTML renderizado implica hacer ingeniería inversa de la forma interna de los datos de la app.
- Anti-automatización de marketplace. Como la mayoría de los grandes marketplaces, el front end de Wish resiste peticiones automatizadas repetidas y sin autenticar — un scraper basado en navegador necesita mantenimiento continuo a medida que evoluciona la defensa.
- Sin API self-serve sancionada para desarrolladores externos. No hay un portal público para desarrolladores donde solicitar acceso programático al catálogo como tercero — que es exactamente el hueco que llena una API de scraping estructurada.
Opción 2: Herramientas no-code
Las extensiones de navegador y los scrapers de apuntar y hacer clic pueden exportar una sola página de búsqueda o una instantánea de producto, pero heredan la misma fragilidad de renderizado en cliente que el DIY y no te dan un esquema estable y versionado — comparar el precio de un merchant en el mismo producto a lo largo de un calendario necesita un endpoint real, no una exportación puntual.
Opción 3: Una API estructurada de Wish
Para un flujo de trabajo repetible, la API de Wish de Crawlora devuelve JSON normalizado para búsqueda por palabra clave y detalle completo de producto — sin credenciales por parte de Wish, sin parsing de páginas que mantener. Busca por palabra clave:
curl "https://api.crawlora.net/api/v1/wish/search?query=wireless+earbuds" \
-H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"total": 4200,
"offset": 0,
"count": 30,
"products": [
{
"product_id": "5f2e1a9c7b6d4f3e2a1b0c9d",
"title": "Wireless Bluetooth Earbuds with Charging Case",
"price": 6.99,
"currency": "USD",
"rating": 4.1,
"review_count": 2318,
"merchant_id": "5a1e0d2f7c3b9e4a1f0d2c8b",
"url": "https://www.wish.com/product/5f2e1a9c7b6d4f3e2a1b0c9d"
}
]
}
}
query es obligatorio. La paginación es real, basada en offset: offset debe ser un múltiplo exacto de count (el count por defecto es 30), y un offset distinto de cero cuesta una petición upstream adicional por cada página que recorras — ten esto en cuenta al paginar profundo en un conjunto de resultados. Una consulta sin coincidencias sigue devolviendo un 200 normal con un array products vacío, no un error.
Resuelve un product_id a partir de un resultado de búsqueda (o de la URL de una página de producto) y extrae el detalle completo, incluida cada variación comprable:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/wish"
hits = requests.get(f"{base}/search", headers=h, params={"query": "wireless earbuds"}).json()["data"]["products"]
product_id = hits[0]["product_id"]
detail = requests.get(f"{base}/product/{product_id}", headers=h).json()["data"]
Una respuesta de detalle de producto trae descripción, estado de agotado, valoración agregada, imágenes y cada variación comprable de talla/color/merchant — cada una con su propio precio, moneda, inventario y merchant (campos reales — revisa los docs):
{
"code": 200,
"msg": "OK",
"data": {
"product_id": "5f2e1a9c7b6d4f3e2a1b0c9d",
"title": "Wireless Bluetooth Earbuds with Charging Case",
"description": "True wireless earbuds with touch controls and a portable charging case.",
"sold_out": false,
"rating": 4.1,
"review_count": 2318,
"images": [
"https://canary.contestimg.wish.com/api/webimage/5f2e1a9c-large.jpg"
],
"variations": [
{
"variation_id": "6a3f2b1c9d8e7f6a5b4c3d2e",
"color": "Black",
"price": 6.99,
"currency": "USD",
"inventory": 143,
"merchant": { "id": "5a1e0d2f7c3b9e4a1f0d2c8b", "name": "TechDeals Direct" }
},
{
"variation_id": "7b4a3c2d1e0f9a8b7c6d5e4f",
"color": "White",
"price": 8.49,
"currency": "USD",
"inventory": 0,
"merchant": { "id": "3c1d0e9f2a7b6c5d4e3f2a1b", "name": "GadgetHub Global" }
}
]
}
}
Ese es el caso de uso de comparación entre merchants en una sola llamada: dos variaciones de los mismos auriculares, de dos merchants distintos, a dos precios y niveles de stock distintos. Guarda una fila por product_id + variation_id y vuelve a extraer según un calendario para rastrear el desvío de price, inventory y sold_out.
Qué puedes recolectar
- Resultados de búsqueda:
product_id, título, precio, moneda, valoración agregada, número de reseñas, id de merchant y URL del producto, paginados con paginación real de offset/count - Detalle de producto: descripción, estado de agotado, valoración agregada, número de reseñas e imágenes
- Variaciones: cada combinación comprable de talla/color/merchant, cada una con su propio
variation_id, precio, moneda, inventario y merchant
Estos son datos públicos de página de producto — resultados de búsqueda y detalle de producto ya visibles para cualquier visitante — no información de cuenta, pedidos, checkout o pagos.
Limitaciones y desafíos comunes
- La matemática de paginación tiene que ser exacta.
offsetdebe ser un múltiplo exacto decount(30 por defecto) — un offset arbitrario da una paginación inconsistente, y cada offset distinto de cero cuesta una petición upstream adicional por cada página recorrida, así que presupuesta créditos al paginar profundo. - Los resultados vacíos siguen siendo 200. Una consulta sin coincidencias devuelve un
200normal con un arrayproductsvacío — trátalo como "sin resultados", no como un fallo a reintentar. - Los ids de producto solo vienen de dos lugares. Un
product_idhexadecimal de 24 caracteres del campoproduct_idde un resultado de búsqueda, o extraído de la URL de una página de producto — no hay otra forma fiable de direccionar un producto. - Rotación de marketplace. Como Wish es un marketplace multi-merchant, el precio, el inventario y el estado
sold_outde una variación dada pueden cambiar rápido e independientemente del resto del listing — trata cualquier extracción como una instantánea. - Solo datos públicos. Esto es lo que una página de producto y de búsqueda ya muestran públicamente — no una forma de llegar a datos de cuenta, pedidos o pagos, ni una forma de sortear los propios Access Terms and Conditions de Wish.
Dónde se usa esto
- Comparación de precios entre merchants — alinea la variación de cada merchant del mismo producto para ver quién es realmente más barato y quién tiene stock.
- Investigación de precios de descuento y catálogo — rastrea tendencias de precios y surtido por palabra clave o categoría en un marketplace construido en torno a precios bajos.
- Monitoreo de variaciones e inventario — observa combinaciones específicas de talla/color/merchant en busca de desvíos de precio o agotamientos a lo largo del tiempo.
Sources
Empieza a recolectar
Pruébalo primero, gratis: pasa cualquier URL pública por el Free Web Scraper, o comprueba si un sitio bloquea bots con el Anti-Bot Checker — sin registro.
Prueba los endpoints de búsqueda y detalle de producto en el Playground, revisa el esquema de request y response en los API docs, y consulta los costos en créditos en la página de pricing. Wish está junto a otros marketplaces de terceros que cubrimos — ver how to scrape Poshmark y how to scrape Mercari para el lado de closet/venta social, o how to scrape Vinted para otro marketplace peer-to-peer. Ver también how to choose a web scraping API e is web scraping legal.
Preguntas frecuentes
¿La búsqueda de Wish soporta paginación?
Sí — /wish/search usa paginación real basada en offset. offset debe ser un múltiplo exacto del count usado en la primera página (el count por defecto es 30), y un offset distinto de cero cuesta una petición upstream adicional por cada página recorrida. Una consulta sin coincidencias devuelve un 200 normal con un array products vacío.
¿Puedo obtener todas las variaciones de un producto de Wish con una API?
Sí — /wish/product/{id} devuelve cada variación comprable de talla/color/merchant, cada una con su propio precio, moneda, inventario y merchant — un producto de un solo SKU sigue devolviendo una lista de un elemento.
¿La API de Wish requiere una cuenta o API key?
No se requiere ninguna cuenta ni API key de Wish por parte de quien llama — solo tu API key de Crawlora.