Extrae Datos de Productos de Temu en JSON con el Plugin de Temu
Temu es uno de los grandes sitios de comercio electronico mas dificiles de scrapear, y la razon es estructural. Cuando cargas una pagina de producto de Temu en un navegador, el HTML que llega esta casi vacio. No hay nombre de producto en el codigo fuente, ni precio, ni valoracion: solo una carcasa. Todo lo que ves en pantalla se rellena despues mediante una peticion del lado del cliente, y esa peticion esta construida para rechazar la automatizacion. Apunta un cliente HTTP normal o un navegador headless hacia ella y obtendras una pagina en blanco o un desafio.
Por eso mucha gente abandona Temu tras una tarde de requests, Playwright y proxies rotativos que siguen sin devolver nada util. Los datos estan ahi en la pantalla, pero no en el documento, y la llamada de API que los rellena no quiere hablar con tu script.
El plugin de Temu resuelve exactamente este problema. Envias una URL de producto y recibes JSON limpio: nombre, precio y moneda, disponibilidad, valoracion, numero de reseñas, imagenes y mas. Este articulo explica por que Temu es tan complicado de scrapear, el enfoque que usa el plugin, los dos endpoints que expone y como construir algo util encima de ellos.
Por Que Temu Es Dificil de Scrapear
La mayoria de las guias de scraping asumen el modelo clasico: pides una URL, recibes HTML y extraes los campos con selectores CSS o XPath. Ese modelo se rompe en Temu de tres formas a la vez.
- El HTML es una carcasa. Los datos del producto no se renderizan en el servidor dentro de la pagina. Se cargan en el cliente despues de la carga, asi que el documento en bruto que descargas no contiene los campos que buscas.
- La llamada de hidratacion rechaza la automatizacion. La peticion interna que rellena la pagina comprueba que la realiza una sesion de navegador real e interactiva. Un cliente HTTP simple falla, e incluso un navegador headless cae en el fingerprinting salvo que este cuidadosamente disfrazado.
- El acceso esta limitado. Temu es agresivo limitando la tasa de cualquier cosa que parezca un crawler. Puedes quemar IPs rapidamente y aun asi chocar contra muros.
En conjunto, esto significa que los dos enfoques obvios se atascan. Un simple requests obtiene una carcasa vacia. Un navegador headless completo a veces renderiza la pagina, pero es lento, pesado y aun asi lo detecta el fingerprinting y lo bloquea a escala.
El Enfoque: Leer el Documento para Crawlers
Hay un detalle sobre los grandes sitios de comercio electronico que es facil pasar por alto: quieren estar en Google. Para posicionar, tienen que servir algo que un crawler de motor de busqueda pueda leer, porque Googlebot no ejecuta el mismo flujo interactivo del cliente que un comprador. Asi que la pagina incluye un bloque estructurado ld+json: un documento JSON-LD que sigue el vocabulario schema.org Product, dirigido a los crawlers.
Ese documento SEO lleva los campos reales: nombre, descripcion, precio y moneda, disponibilidad, condicion del articulo, valoracion, numero de reseñas, el grupo de variantes, la lista de imagenes, las valoraciones por reseña y un video del producto cuando existe. Son los mismos datos que la pagina muestra a una persona, formateados para maquinas, y no dependen de la hidratacion del lado del cliente que bloquea la automatizacion.
El plugin de Temu lee ese documento para crawlers en lugar de intentar renderizar la pagina. La consecuencia para ti es simple: sin navegador headless, sin rotacion de proxies, sin ajuste de fingerprint. Llamas a un endpoint y recibes JSON estructurado.
Esta es tambien una tecnica que vale la pena entender por si misma. En muchos sitios que parecen imposibles de scrapear, revisar el codigo fuente en busca de un bloque <script type="application/ld+json">, o de datos estructurados dirigidos a crawlers, te entregara campos limpios que el DOM renderizado esconde. Es lo primero que conviene probar antes de recurrir a un navegador.
Dos Endpoints: Producto y Busqueda
El plugin tiene dos partes:
- Producto - una URL de producto de entrada, JSON completo de salida.
- Busqueda - una palabra clave de entrada, una lista de URLs de productos de Temu de salida, tomadas directamente de la propia pagina de busqueda de Temu.
Estan pensados para usarse juntos: busca para descubrir URLs de productos y luego resuelve cada URL a sus datos completos con el endpoint de producto.
Cada peticion se autentica con una cabecera, x-scrapeunblocker-key, que lleva tu clave de API.
Obtener un Producto Individual
El endpoint de producto es un POST a /goods/temu-product con la url del producto. La URL debe ser una pagina de producto real: su ruta termina en -g-<id>.html. Las URLs de busqueda o categoria se rechazan con un 400.
curl -X POST "https://api.scrapeunblocker.com/goods/temu-product?url=https%3A%2F%2Fwww.temu.com%2Fexample-g-601099512345678.html" \
-H "x-scrapeunblocker-key: YOUR_API_KEY"
La respuesta es un objeto JSON plano:
{
"url": "https://www.temu.com/example-g-601099512345678.html",
"name": "822pcs Spaceship Building Blocks Set",
"description": "Shop the 822pcs Spaceship Building Blocks Set on Temu ...",
"sku": null,
"brand": "Temu",
"price": "49.04",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"rating": 4.6,
"reviewCount": 871,
"itemCondition": "https://schema.org/NewCondition",
"variantGroupId": "601099512345678",
"images": ["https://img.kwcdn.com/product/fancy/xxxx.jpg"],
"reviews": [
{ "rating": 5.0, "date": "2026-07-08", "author": "****", "body": "****" }
],
"video": null
}
Algunos campos merecen una nota, porque reflejan la realidad de lo que Temu pone en el documento para crawlers y no una lista de deseos:
pricees una cadena de texto, servida exactamente como Temu la formatea, ypriceCurrencyes el codigo ISO. La moneda sigue la region de la IP de salida, asi que el mismo producto puede volver comoUSD,EURoAED. Si almacenas precios, guarda la moneda junto al numero y normaliza despues.availabilityeitemConditionson URLs de schema.org, comohttps://schema.org/InStockyhttps://schema.org/NewCondition. Compara por el ultimo segmento de la ruta en lugar de la cadena completa.imageslleva solo una o dos URLs, no la galeria completa. El documento para crawlers no incluye todas las imagenes que muestra el carrusel del comprador.reviewste da unratingy unadatereales por reseña, pero Temu enmascara elauthory elbody: vuelven como****. Obtienes la distribucion y la recencia de las reseñas, no el texto.variantGroupIdvincula las variantes del mismo articulo, util si estas de-duplicando un catalogo.
Buscar por Palabra Clave
El endpoint de busqueda toma una keyword y devuelve alrededor de 40 URLs de productos por llamada, extraidas de los propios resultados de busqueda de Temu.
curl -X POST "https://api.scrapeunblocker.com/goods/temu-search?keyword=kids%20toys&limit=40&sort=price_asc" \
-H "x-scrapeunblocker-key: YOUR_API_KEY"
{
"keyword": "kids toys",
"sort": "price_asc",
"resultsCollected": 40,
"urls": [
"https://www.temu.com/lt-en/kids-educational-building-blocks-set-g-601099613072998.html",
"https://www.temu.com/lt-en/water-elf-set-g-601104298893637.html"
]
}
La busqueda es solo descubrimiento: te entrega URLs de productos limpias, cada una terminando en -g-<id>.html, listas para pasar al endpoint de producto. La controlas con tres parametros:
keyword- la frase de busqueda, comokids toysophone case.limit- cuantas URLs devolver, por defecto40, maximo100. Una pagina de busqueda lleva unos 40 resultados.sort- el orden del resultado, usando el propio orden de Temu:relevance(por defecto),best_selling,recent,price_ascoprice_desc. Es del lado del servidor, asi que se ordena todo el conjunto de resultados, no solo la pagina que recibes reorganizada.
Juntandolo Todo en Python
El patron natural es buscar y luego resolver. Busca una palabra clave, toma las URLs y obten cada producto. Aqui tienes un pequeño script que saca los productos mas baratos para una palabra clave e imprime precio, valoracion y nombre:
import requests
from urllib.parse import quote
BASE = "https://api.scrapeunblocker.com"
HEADERS = {"x-scrapeunblocker-key": "YOUR_API_KEY"}
def temu_search(keyword, limit=40, sort="relevance"):
url = f"{BASE}/goods/temu-search?keyword={quote(keyword)}&limit={limit}&sort={sort}"
r = requests.post(url, headers=HEADERS, timeout=60)
r.raise_for_status()
return r.json()["urls"]
def temu_product(product_url):
url = f"{BASE}/goods/temu-product?url={quote(product_url, safe='')}"
r = requests.post(url, headers=HEADERS, timeout=60)
r.raise_for_status()
return r.json()
urls = temu_search("kids toys", limit=20, sort="price_asc")
for u in urls[:10]:
p = temu_product(u)
print(f"{p['price']} {p['priceCurrency']} {p['rating']}* {p['name'][:60]}")
Como los campos vuelven normalizados, la logica interesante es tuya para escribir, no el mantenimiento de selectores.
Gestiona el Limite de Tasa y los Errores
La vista de crawler de Temu esta limitada, asi que este plugin esta construido para uso dirigido - comprobaciones de precio, monitorizacion y comparacion - no para crawling masivo. Diseña pensando en eso desde el principio.
429significa que el presupuesto de tasa compartido de Temu se ha agotado. Espera y reintenta en breve en lugar de insistir. Añade una pausa corta y unos cuantos reintentos con retroceso exponencial en tu bucle.400significa que la URL no era una pagina de producto. Asegurate de que la ruta termina en-g-<id>.html.502significa que el documento no se pudo obtener: un bloqueo o resultado vacio. Reintenta una vez; si persiste, el producto puede haber desaparecido.504es un tiempo de espera agotado. Reintenta.
Una regla simple: manten un volumen de peticiones moderado, cachea lo que ya obtuviste y solo vuelve a obtener productos cuyo precio o disponibilidad realmente necesites seguir.
Que Puedes Construir
Una vez que los datos de Temu son JSON limpio, varias herramientas se vuelven rapidas de construir:
- Monitorizacion de precios - obten un producto de forma programada, almacena
priceyavailabilityy avisa cuando cualquiera cambie. - Investigacion de competencia - busca una palabra clave para unas 40 URLs, resuelve cada una y compara precios, valoraciones y numero de reseñas del conjunto.
- Enriquecimiento de catalogo - si ya tienes URLs de productos de Temu, resuelvelas a campos limpios (nombre, precio, valoracion, imagenes) para enriquecer tu propio catalogo.
Cada una de ellas es el plugin mas un poco de tu propia logica, sin infraestructura de scraping que mantener.
Preguntas Frecuentes
Necesito un navegador o proxies para scrapear Temu? No. El plugin lee el documento estructurado para crawlers de Temu en lugar de renderizar la pagina, asi que no hay navegador headless ni rotacion de proxies por tu parte. Llamas a un endpoint HTTP con tu clave de API.
Por que a veces la moneda es distinta para el mismo producto?
Los precios de Temu siguen la region de la IP de salida, asi que el mismo articulo puede devolver USD, EUR o AED. Almacena siempre priceCurrency junto a price y convierte despues si necesitas una unica moneda.
Por que se ocultan los autores y el texto de las reseñas?
Temu enmascara el author y el body de la reseña en el documento para crawlers, asi que vuelven como ****. El rating y la date por reseña son reales, lo que basta para tendencias de valoracion y recencia, pero no para el sentimiento del texto.
Puedo crawlear Temu de forma masiva con esto?
No. El endpoint esta limitado y devuelve 429 cuando el presupuesto compartido se agota. Esta diseñado para consultas dirigidas - monitorizacion, comparacion y enriquecimiento - no para crawling de catalogo completo.
Como obtengo datos de producto a partir de una busqueda? La busqueda devuelve solo URLs. Toma cada URL y pasala al endpoint de producto para obtener nombre, precio, valoracion, imagenes y el resto.
Conclusion
Temu se gana su reputacion de objetivo dificil: los datos estan en la pantalla pero no en el documento, y la llamada que rellena la pagina esta construida para rechazar la automatizacion. El plugin de Temu esquiva eso leyendo los datos estructurados que Temu ya sirve a los crawlers, asi que obtienes nombre, precio, valoracion, reseñas e imagenes como JSON limpio desde una sola peticion.
Si quieres probarlo, ejecuta una consulta en el panel primero para ver el JSON y luego conectalo a tu codigo usando la documentacion para desarrolladores. Es uno de un conjunto creciente de plugins listos para usar en ScrapeUnblocker que convierten sitios que de otro modo requeririan trabajo real de scraping en una unica llamada estructurada.
Prueba ScrapeUnblocker gratis
Tasa de éxito del 95%+ · desde 0,55 € por cada 1000 llamadas · 500 solicitudes gratis al registrarte.