Extraire les Donnees Produit de Temu en JSON avec le Plugin Temu
Temu est l’un des grands sites e-commerce les plus difficiles a scraper, et la raison est structurelle. Quand tu charges une page produit Temu dans un navigateur, le HTML qui arrive est presque vide. Pas de nom de produit dans le code source, pas de prix, pas de note - juste une coquille. Tout ce que tu vois a l’ecran est rempli ensuite par une requete cote client, et cette requete est concue pour refuser l’automatisation. Pointe un client HTTP normal ou un navigateur headless dessus et tu obtiens soit une page blanche, soit un defi.
C’est pourquoi beaucoup de gens abandonnent Temu apres un apres-midi de requests, Playwright et proxys rotatifs qui ne renvoient toujours rien d’utile. Les donnees sont bien a l’ecran, mais pas dans le document, et l’appel d’API qui les remplit ne veut pas parler a ton script.
Le plugin Temu resout precisement ce probleme. Tu envoies une URL de produit et tu recois du JSON propre : nom, prix et devise, disponibilite, note, nombre d’avis, images et plus encore. Cet article explique pourquoi Temu est si penible a scraper, l’approche qu’utilise le plugin, les deux endpoints qu’il expose et comment construire quelque chose d’utile par-dessus.
Pourquoi Temu Est Difficile a Scraper
La plupart des guides de scraping supposent le modele classique : tu demandes une URL, tu recois du HTML et tu extrais les champs avec des selecteurs CSS ou XPath. Ce modele se casse sur Temu de trois manieres a la fois.
- Le HTML est une coquille. Les donnees produit ne sont pas rendues cote serveur dans la page. Elles se chargent cote client apres le chargement, donc le document brut que tu telecharges ne contient pas les champs que tu cherches.
- L’appel d’hydratation refuse l’automatisation. La requete interne qui remplit la page verifie qu’elle provient d’une vraie session de navigateur interactive. Un simple client HTTP echoue, et meme un navigateur headless trebuche sur le fingerprinting a moins d’etre soigneusement deguise.
- L’acces est limite. Temu limite agressivement le debit de tout ce qui ressemble a un crawler. Tu peux brûler des IP rapidement et te heurter quand meme a des murs.
Mis bout a bout, cela signifie que les deux approches evidentes calent toutes les deux. Un simple requests obtient une coquille vide. Un navigateur headless complet peut parfois rendre la page, mais il est lent, lourd et se fait quand meme detecter par le fingerprinting et bloquer a grande echelle.
L’Approche : Lire le Document pour Crawlers
Il y a un detail sur les grands sites e-commerce qu’on oublie facilement : ils veulent apparaitre dans Google. Pour se classer, ils doivent servir quelque chose qu’un crawler de moteur de recherche peut lire, car Googlebot n’execute pas le meme flux client interactif qu’un acheteur. La page inclut donc un bloc structure ld+json - un document JSON-LD suivant le vocabulaire schema.org Product, destine aux crawlers.
Ce document SEO porte les vrais champs : nom, description, prix et devise, disponibilite, etat de l’article, note, nombre d’avis, le groupe de variantes, la liste d’images, les notes par avis et une video produit lorsqu’elle existe. Ce sont les memes donnees que la page montre a un humain, formatees pour les machines, et elles ne dependent pas de l’hydratation cote client qui bloque l’automatisation.
Le plugin Temu lit ce document pour crawlers au lieu d’essayer de rendre la page. La consequence pour toi est simple : pas de navigateur headless, pas de rotation de proxys, pas de reglage de fingerprint. Tu appelles un endpoint et tu recois du JSON structure.
C’est aussi une technique qui vaut la peine d’etre comprise en soi. Sur beaucoup de sites qui semblent impossibles a scraper, verifier le code source a la recherche d’un bloc <script type="application/ld+json">, ou de donnees structurees destinees aux crawlers, te livrera des champs propres que le DOM rendu enterre. C’est la premiere chose a essayer avant de recourir a un navigateur.
Deux Endpoints : Produit et Recherche
Le plugin a deux parties :
- Produit - une URL de produit en entree, du JSON complet en sortie.
- Recherche - un mot-cle en entree, une liste d’URL de produits Temu en sortie, prises directement sur la page de recherche de Temu.
Ils sont concus pour etre utilises ensemble : cherche pour decouvrir des URL de produits, puis resous chaque URL vers ses donnees completes avec l’endpoint produit.
Chaque requete s’authentifie avec un en-tete, x-scrapeunblocker-key, portant ta cle d’API.
Recuperer un Produit Individuel
L’endpoint produit est un POST vers /goods/temu-product avec l’url du produit. L’URL doit etre une vraie page produit - son chemin se termine par -g-<id>.html. Les URL de recherche ou de categorie sont rejetees avec 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 reponse est un objet JSON plat :
{
"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
}
Quelques champs meritent une note, car ils refletent la realite de ce que Temu met dans le document pour crawlers et non une liste de souhaits :
priceest une chaine de caracteres, servie exactement comme Temu la formate, etpriceCurrencyest le code ISO. La devise suit la region de l’IP de sortie, donc le meme produit peut revenir enUSD,EURouAED. Si tu stockes des prix, garde la devise a cote du nombre et normalise plus tard.availabilityetitemConditionsont des URL schema.org, commehttps://schema.org/InStockethttps://schema.org/NewCondition. Compare sur le dernier segment du chemin plutot que sur la chaine complete.imagesne porte qu’une ou deux URL, pas la galerie complete. Le document pour crawlers n’inclut pas chaque image que montre le carrousel de l’acheteur.reviewste donne uneratinget unedatereelles par avis, mais Temu masque l’authoret lebody- ils reviennent en****. Tu obtiens la distribution et la recence des avis, pas le texte.variantGroupIdrelie les variantes du meme article, utile si tu dedupliques un catalogue.
Rechercher par Mot-Cle
L’endpoint de recherche prend un keyword et renvoie environ 40 URL de produits par appel, tirees des propres resultats de recherche 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 recherche sert uniquement a la decouverte - elle te livre des URL de produits propres, chacune se terminant par -g-<id>.html, pretes a passer a l’endpoint produit. Tu la controles avec trois parametres :
keyword- la phrase de recherche, commekids toysouphone case.limit- combien d’URL renvoyer, par defaut40, maximum100. Une page de recherche porte environ 40 resultats.sort- l’ordre des resultats, selon le tri propre de Temu :relevance(par defaut),best_selling,recent,price_ascouprice_desc. C’est cote serveur, donc tout l’ensemble de resultats est trie, pas seulement la page recue reorganisee.
Tout Assembler en Python
Le schema naturel est chercher, puis resoudre. Cherche un mot-cle, prends les URL et recupere chaque produit. Voici un petit script qui sort les articles les moins chers pour un mot-cle et affiche prix, note et nom :
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]}")
Comme les champs reviennent normalises, la logique interessante est a toi de l’ecrire - pas la maintenance de selecteurs.
Gerer la Limite de Debit et les Erreurs
La vue crawler de Temu est limitee, donc ce plugin est concu pour un usage cible - verifications de prix, surveillance et comparaison - pas pour du crawling de masse. Concois en tenant compte de cela des le depart.
429signifie que le budget de debit partage de Temu est epuise. Patiente et reessaie sous peu au lieu de marteler. Ajoute une courte pause et quelques reprises avec un backoff exponentiel dans ta boucle.400signifie que l’URL n’etait pas une page produit. Assure-toi que le chemin se termine par-g-<id>.html.502signifie que le document n’a pas pu etre recupere - un blocage ou un resultat vide. Reessaie une fois ; si cela persiste, le produit a peut-etre disparu.504est un depassement de delai. Reessaie.
Une regle simple : garde un volume de requetes modere, mets en cache ce que tu as deja recupere et ne recupere de nouveau que les produits dont tu as vraiment besoin de suivre le prix ou la disponibilite.
Ce que Tu Peux Construire
Une fois les donnees Temu en JSON propre, plusieurs outils deviennent rapides a construire :
- Surveillance des prix - recupere un produit selon un planning, stocke
priceetavailabilityet alerte quand l’un ou l’autre change. - Recherche concurrentielle - cherche un mot-cle pour environ 40 URL, resous chacune et compare prix, notes et nombre d’avis sur l’ensemble.
- Enrichissement de catalogue - si tu as deja des URL de produits Temu, resous-les en champs propres (nom, prix, note, images) pour enrichir ton propre catalogue.
Chacun de ces cas, c’est le plugin plus un peu de ta propre logique, sans infrastructure de scraping a entretenir.
FAQ
Ai-je besoin d’un navigateur ou de proxys pour scraper Temu ? Non. Le plugin lit le document structure pour crawlers de Temu au lieu de rendre la page, donc pas de navigateur headless ni de rotation de proxys de ton cote. Tu appelles un endpoint HTTP avec ta cle d’API.
Pourquoi la devise est-elle parfois differente pour le meme produit ?
Les prix de Temu suivent la region de l’IP de sortie, donc le meme article peut renvoyer USD, EUR ou AED. Stocke toujours priceCurrency a cote de price et convertis plus tard si tu as besoin d’une seule devise.
Pourquoi les auteurs et le texte des avis sont-ils caches ?
Temu masque l’author et le body de l’avis dans le document pour crawlers, ils reviennent donc en ****. La rating et la date par avis sont reelles, ce qui suffit pour les tendances de note et la recence, mais pas pour le sentiment du texte.
Puis-je crawler Temu en masse avec ceci ?
Non. L’endpoint est limite et renvoie 429 quand le budget partage est epuise. Il est concu pour des requetes ciblees - surveillance, comparaison et enrichissement - pas pour du crawling de catalogue complet.
Comment obtenir des donnees produit a partir d’une recherche ? La recherche ne renvoie que des URL. Prends chaque URL et passe-la a l’endpoint produit pour obtenir nom, prix, note, images et le reste.
Conclusion
Temu merite sa reputation de cible difficile : les donnees sont a l’ecran mais pas dans le document, et l’appel qui remplit la page est concu pour refuser l’automatisation. Le plugin Temu contourne cela en lisant les donnees structurees que Temu sert deja aux crawlers, donc tu obtiens nom, prix, note, avis et images en JSON propre depuis une seule requete.
Si tu veux l’essayer, lance d’abord une requete dans le tableau de bord pour voir le JSON, puis integre-le a ton code avec la documentation developpeur. C’est l’un d’un ensemble croissant de plugins prets a l’emploi sur ScrapeUnblocker qui transforment des sites qui demanderaient sinon un vrai travail de scraping en un unique appel structure.
Essayez ScrapeUnblocker gratuitement
Taux de réussite de plus de 95 % · à partir de 0,55 € pour 1 000 appels · 500 requêtes gratuites à l'inscription.