AliExpress est l'une des plus grandes marketplaces du web, et une seule page de résultats de recherche concentre les données qui alimentent le suivi des prix, la recherche de produits et la découverte de fournisseurs : un titre de produit, son prix, une note de vendeur, un nombre de commandes ou de ventes, et un lien vers la fiche. Récupérez cela sur un mot-clé et vous obtenez une vue structurée de ce qui se vend, à quel prix et avec quelles notes, le tout à partir de données de fiches publiques.
Ce guide vous montre comment scraper les pages de recherche AliExpress avec JavaScript et Node.js. Vous construisez un petit scraper exécutable qui transforme un mot-clé en URL de recherche AliExpress, récupère la page de résultats rendue via la Crawling API, analyse chaque carte de produit avec cheerio, parcourt la pagination et exporte les lignes en JSON et CSV. Nous limitons tout le tutoriel aux données publiques de recherche et de fiches, et la section sur la légalité, vers la fin, n'est pas du remplissage, alors lisez-la avant de pointer ceci vers un quelconque volume réel.
Ce que vous allez construire
Un script Node.js qui prend un mot-clé de recherche, construit l'URL de recherche AliExpress, récupère le HTML rendu via la Crawling API et extrait un enregistrement structuré pour chaque produit de la page de résultats. Nous extrayons ces champs par carte, le même ensemble que renvoyait l'ancien scraper de SERP AliExpress :
- Titre le nom du produit tel qu'il est listé, par exemple "Wireless Bluetooth Earbuds Noise Cancelling".
- Prix le prix actuel tel qu'affiché sur la carte, comme "$12.96".
- Note la valeur de note du vendeur ou du produit, par exemple "4.9".
- Commandes le nombre de commandes ou de ventes, tel que "600 sold".
- URL du produit le lien vers la page de l'article individuel.
Pourquoi une simple requête échoue sur AliExpress
Si vous demandez une URL de recherche AliExpress avec un client HTTP nu, vous obtenez une réponse avec le statut 200 et très peu de données produit exploitables dans le corps. Deux choses jouent contre vous. D'abord, AliExpress construit ses résultats de recherche dans le navigateur avec JavaScript, de sorte que le HTML initial est une coquille quasi vide jusqu'à ce que les scripts de la page s'exécutent et rendent la grille de produits. Ensuite, AliExpress repère vite le trafic automatisé : les IP de datacenter et les schémas de requêtes qui ne ressemblent pas à un vrai navigateur sont mis au défi, limités en débit ou confrontés à un CAPTCHA avant même d'atteindre les fiches rendues.
Un scraper de recherche AliExpress fonctionnel a donc besoin de deux choses dans une seule requête : un navigateur qui rend réellement la page, et une IP que la plateforme interprète comme un vrai visiteur. Vous pouvez assembler cela vous-même avec un navigateur sans interface plus un pool de proxys résidentiels rotatifs, mais les coudre ensemble et les garder en bonne santé représente l'essentiel du travail. La Crawling API regroupe les deux en un seul appel : vous lui envoyez l'URL avec un token JavaScript, elle rend la page derrière une IP de confiance, et elle vous renvoie un HTML fini que vous pouvez analyser.
Crawlbase propose deux types de tokens. Le token normal récupère le HTML statique ; le token JavaScript (JS) rend d'abord la page dans un vrai navigateur. AliExpress construit sa grille de produits côté client, donc le token JS vous donne la page la plus complète ici. Utiliser le token normal peut renvoyer une coquille sans produits, vous laissant rien à analyser.
Prérequis
Vous avez besoin de quelques éléments en place avant d'écrire le moindre code. Aucun ne prend longtemps.
JavaScript et Node.js de base. Vous devez être à l'aise pour écrire et exécuter un script Node et installer des paquets avec npm. Si vous débutez avec Node, le tutoriel sur comment construire un scraper web avec Node.js couvre le terrain que ce tutoriel suppose acquis.
Node.js 16 ou ultérieur. Confirmez votre version avec node --version. Si vous ne l'avez pas, installez-le depuis le site web de Node.js ou via un gestionnaire de versions comme nvm.
Un compte Crawlbase et un token JS. Inscrivez-vous, ouvrez votre tableau de bord et copiez votre token JavaScript (JS) depuis la page de documentation du compte. Traitez le token comme un mot de passe : il authentifie vos requêtes, donc gardez-le hors du contrôle de version.
Configurer le projet
Créez un dossier de projet, initialisez-le et installez les deux bibliothèques dont le scraper a besoin.
node --version mkdir aliexpress-search-scraper && cd aliexpress-search-scraper npm init -y npm install crawlbase cheerio
Deux dépendances font le travail : crawlbase est le client Node officiel de la Crawling API, et cheerio analyse le HTML renvoyé avec une API à la jQuery pour que vous puissiez extraire les champs individuels par sélecteur CSS. Si les sélecteurs sont nouveaux pour vous, l'introduction sur les sélecteurs XPath et CSS est un bon compagnon.
Étape 1 : Construire l'URL de recherche à partir d'un mot-clé
AliExpress transforme une recherche par mot-clé en une URL prévisible. Le chemin de recherche en gros prend le mot-clé avec les espaces remplacés par des tirets, ce qui est exactement la transformation qu'utilisait l'ancien scraper. Enveloppez cela dans un petit assistant pour que tout mot-clé devienne une URL de recherche valide.
function searchUrl(keyword, page = 1) { const slug = keyword.trim().split(' ').join('-'); return `https://www.aliexpress.com/w/wholesale-${slug}.html?page=${page}`; } console.log(searchUrl('wireless earbuds')); // https://www.aliexpress.com/w/wholesale-wireless-earbuds.html?page=1
Le paramètre page est ce que vous incrémentez plus tard pour parcourir la pagination. Pour l'instant il reste à 1 pour que vous puissiez faire fonctionner une seule page avant de passer à l'échelle.
Étape 2 : Récupérer la page de recherche rendue
Ensuite, obtenez la page finie. Importez la classe CrawlingAPI, initialisez-la avec votre token JS et demandez l'URL de recherche. Vérifier le code de statut avant l'analyse garde les échecs bruyants plutôt que silencieux.
const { CrawlingAPI } = require('crawlbase'); const api = new CrawlingAPI({ token: 'YOUR_CRAWLBASE_TOKEN' }); async function crawl(pageUrl) { const options = { ajax_wait: 'true', page_wait: 5000 }; const response = await api.get(pageUrl, options); if (response.statusCode === 200) { return response.body; } console.error(`Request failed: ${response.statusCode}`); return null; } crawl(searchUrl('wireless earbuds')).then((html) => { console.log(html ? html.slice(0, 500) : 'No HTML returned'); });
Les deux options d'attente comptent pour une cible rendue côté client comme celle-ci. ajax_wait indique à l'API d'attendre la fin du chargement du contenu asynchrone, et page_wait patiente un nombre fixe de millisecondes après le chargement pour que la grille de produits au rendu tardif apparaisse avant la capture de la page. Cinq secondes constituent un point de départ raisonnable ; augmentez la valeur si les produits reviennent vides. Exécutez le script avec node scraper.js et vous devriez voir un véritable balisage de produits, pas une coquille dépouillée. Cela confirme que le rendu fonctionne avant d'écrire le moindre sélecteur.
AliExpress construit sa grille de produits côté client et met au défi le trafic de scraping, vous avez donc besoin d'une page rendue derrière une IP de confiance en un seul appel. La Crawling API prend un token JS, exécute la page dans un vrai navigateur, fait tourner des IP résidentielles côté serveur et vous remet un HTML fini, pour que vous évitiez de gérer vous-même une flotte sans interface et un pool de proxys. Pointez-la d'abord sur une page de recherche publique avec l'offre gratuite.
Étape 3 : Analyser chaque produit avec cheerio
Avec le HTML rendu en main, chargez-le dans cheerio et parcourez les cartes de produits. AliExpress dispose chaque résultat de recherche dans une carte répétée, vous sélectionnez donc chaque carte, puis lisez le titre, le prix, la note, les commandes et le lien de l'article à l'intérieur. Lire chaque champ de façon défensive empêche une valeur manquante de faire planter l'exécution.
const cheerio = require('cheerio'); function parseSearch(html) { const $ = cheerio.load(html); const items = []; $('a.search-card-item').each((_, el) => { const card = $(el); const title = card.find('[title]').first().attr('title'); if (!title) return; const href = card.attr('href') || ''; const url = href.startsWith('//') ? `https:${href}` : href; items.push({ title: title.trim(), price: card.find('.multi--price-sale--U-S0jtj').text().trim() || null, rating: card.find('.multi--starList--Fh2vqvr').attr('aria-label') || null, orders: card.find('.multi--trade--Ktbl2jB').text().trim() || null, url: url || null, }); }); return items; }
Quelques détails gardent cela résilient. Le titre est lu depuis l'attribut title de la carte plutôt que depuis son texte, car AliExpress tronque le nom visible mais conserve la chaîne complète dans l'attribut. L'URL du produit sur AliExpress est souvent relative au protocole (elle commence par //), donc l'assistant ajoute https: devant pour la rendre absolue, ce qui reflète la sortie héritée où les liens https: nus étaient une aspérité connue. Chaque champ se rabat sur null lorsque l'élément est absent, ce qui est courant puisque toutes les cartes n'affichent pas une note ou un nombre de commandes.
AliExpress hache ses noms de classe (multi--price-sale--U-S0jtj, multi--starList--Fh2vqvr, et les autres), et il régénère ces hachages lors des déploiements, donc ils changent sans préavis. Traitez les sélecteurs ci-dessus comme un modèle de départ, pas comme un contrat. Lorsqu'un champ revient à null, réinspectez la page en direct dans les outils de développement de votre navigateur et mettez à jour le sélecteur. Une maintenance périodique des sélecteurs est normale pour tout scraper en production, ce n'est pas le signe que quelque chose est cassé.
Étape 4 : Tout assembler
Maintenant, câblez le constructeur d'URL, la récupération et l'analyse dans un seul script exécutable. Construisez l'URL, récupérez le HTML rendu, passez-le à l'analyseur et affichez les enregistrements structurés.
const { CrawlingAPI } = require('crawlbase'); const cheerio = require('cheerio'); const api = new CrawlingAPI({ token: 'YOUR_CRAWLBASE_TOKEN' }); function searchUrl(keyword, page = 1) { const slug = keyword.trim().split(' ').join('-'); return `https://www.aliexpress.com/w/wholesale-${slug}.html?page=${page}`; } async function crawl(pageUrl) { const options = { ajax_wait: 'true', page_wait: 5000 }; const response = await api.get(pageUrl, options); if (response.statusCode === 200) return response.body; console.error(`Request failed: ${response.statusCode}`); return null; } function parseSearch(html) { const $ = cheerio.load(html); const items = []; $('a.search-card-item').each((_, el) => { const card = $(el); const title = card.find('[title]').first().attr('title'); if (!title) return; const href = card.attr('href') || ''; const url = href.startsWith('//') ? `https:${href}` : href; items.push({ title: title.trim(), price: card.find('.multi--price-sale--U-S0jtj').text().trim() || null, rating: card.find('.multi--starList--Fh2vqvr').attr('aria-label') || null, orders: card.find('.multi--trade--Ktbl2jB').text().trim() || null, url: url || null, }); }); return items; } async function main() { const html = await crawl(searchUrl('wireless earbuds')); if (!html) return; const items = parseSearch(html); console.log(JSON.stringify(items.slice(0, 3), null, 2)); } main();
À quoi ressemble la sortie
Exécutez le script complet avec node scraper.js et vous obtenez un tableau propre d'enregistrements, un par produit, prêt à être écrit en JSON, CSV ou dans une base de données.
[ { "title": "Wireless Bluetooth Earbuds Noise Cancelling Touch Control", "price": "$12.96", "rating": "4.9", "orders": "600 sold", "url": "https://www.aliexpress.com/item/1005005690275912.html" }, { "title": "TWS Gaming Earphones Low Latency Long Battery Life", "price": "$8.31", "rating": "4.7", "orders": "2000 sold", "url": "https://www.aliexpress.com/item/1005005123456789.html" } ]
Boucler à travers les pages de résultats
Une page de résultats est une démo ; un vrai travail parcourt la pagination. AliExpress expose le numéro de page via le paramètre de requête page, que l'assistant searchUrl accepte déjà, vous construisez donc chaque URL de page dans une boucle, la récupérez via la Crawling API, l'analysez avec la même fonction et collectez les lignes. Comme chaque page de résultats partage la même structure de carte, l'analyseur que vous avez déjà écrit fonctionne sur toutes sans modification.
async function scrapePages(keyword, totalPages) { const all = []; for (let page = 1; page <= totalPages; page++) { const html = await crawl(searchUrl(keyword, page)); if (html) all.push(...parseSearch(html)); } return all; } scrapePages('wireless earbuds', 3).then((rows) => { console.log(`Collected ${rows.length} products`); });
Pour enrichir chaque ligne avec le détail complet (chaque image, la description complète, les options de livraison et le profil complet du vendeur), prenez le url de chaque carte et récupérez cette page d'article individuel via la même fonction crawl, puis écrivez un petit analyseur pour la mise en page du produit. Le motif est identique : rendre, puis analyser. Pour la version page-produit de ce travail dans un autre langage, voyez comment scraper des produits AliExpress avec Python.
Exporter en JSON et CSV
Collecter des lignes en mémoire convient pour une démo, mais vous les voulez généralement sur disque. Le module fs intégré de Node écrit le JSON en une ligne, et un petit assistant transforme le même tableau en CSV pour les tableurs ou un import rapide.
const fs = require('fs'); function toCsv(rows) { const headers = ['title', 'price', 'rating', 'orders', 'url']; const escape = (v) => `"${(v ?? '').toString().replace(/"/g, '""')}"`; const lines = rows.map((r) => headers.map((h) => escape(r[h])).join(',')); return [headers.join(','), ...lines].join('\n'); } scrapePages('wireless earbuds', 3).then((rows) => { fs.writeFileSync('aliexpress-products.json', JSON.stringify(rows, null, 2)); fs.writeFileSync('aliexpress-products.csv', toCsv(rows)); console.log(`Saved ${rows.length} products to JSON and CSV`); });
L'assistant CSV met chaque champ entre guillemets et double les guillemets internes, ce qui empêche les titres de produits contenant des virgules de casser la disposition des colonnes. À partir de là, le JSON alimente une base de données ou un notebook, et le CSV s'ouvre directement dans un tableur pour un balayage rapide des prix.
Rester débloqué
Même avec le rendu pris en charge, AliExpress surveille le trafic en forme de scraper. Quelques habitudes maintiennent une exécution saine, et elles s'appliquent à toute cible commerciale difficile.
- Espacez vos requêtes. Marteler les pages dans une boucle serrée est le moyen le plus rapide de se faire limiter ou confronter à un CAPTCHA. Répartissez les requêtes et variez vos mots-clés au lieu d'explorer un seul chemin à pleine vitesse.
- Appuyez-vous sur la rotation. Un pool d'IP résidentielles répartit les requêtes sur de nombreuses adresses de vrais utilisateurs pour qu'aucune seule ne déclenche une limite de débit. La Crawling API s'en charge pour vous ; si vous montez votre propre pile, c'est la partie à réussir.
- Lisez les codes de statut. Une exécution qui se met à renvoyer des défis ou des erreurs vous indique que le débit actuel ou le palier d'IP ne suffit plus. Traitez cela comme un signal pour lever le pied, pas comme du bruit à ignorer.
Pour le manuel plus large, voyez comment scraper des sites web sans se faire bloquer. Si vous préférez acheminer votre propre trafic à travers un pool rotatif plutôt que d'utiliser l'API gérée, le Smart AI Proxy vous donne la même rotation d'IP résidentielles sous forme d'un point de terminaison proxy clé en main ; l'approche proxy-d'abord sur ce site précis est couverte dans le scraping AliExpress par proxy. AliExpress est aussi une cible fréquente de travaux plus larges de web scraping e-commerce, où le même motif récupération-puis-analyse se transpose entre les sites, et les champs de prix que vous collectez ici alimentent directement l'intelligence des prix.
Est-il légal de scraper AliExpress ?
Que le scraping d'AliExpress soit autorisé dépend des conditions d'utilisation d'AliExpress, de votre juridiction et de ce que vous faites des données. Les conditions d'AliExpress restreignent l'accès automatisé, donc le scraping peut aller à l'encontre de ces conditions, quelle que soit la prudence de votre outillage. Aucun code ici ne change cela ; il fait simplement fonctionner la partie technique. Lisez les Conditions d'utilisation d'AliExpress et son robots.txt, et traitez les deux comme la limite de ce que vous collectez.
Quelques lignes de conduite à respecter. Ne collectez que les données publiques de recherche : le titre du produit, le prix, la note, le nombre de commandes et le lien de l'article que tout le monde peut voir sans compte. Respectez les attentes de débit énoncées par AliExpress et gardez votre volume de requêtes assez bas pour ne pas solliciter ses serveurs. Évitez les données personnelles, y compris tout ce qui est lié à des acheteurs ou vendeurs identifiables au-delà du nom public de la boutique affiché sur une carte, et ne redistribuez pas en masse les images ou descriptions de produits, car ce sont les médias protégés par le droit d'auteur des vendeurs. Si vous prévoyez de réutiliser les données à des fins commerciales, obtenez une autorisation ou un accord officiel plutôt que de présumer que le silence vaut consentement.
Pour le volume ou l'usage commercial, AliExpress propose une API officielle d'affiliation et de plateforme ouverte via sa maison mère Alibaba, et c'est le bon outil quand vous avez besoin de grands volumes, d'une structure garantie ou de droits commerciaux. Ce guide est délibérément limité aux pages publiques de recherche et de fiches, car c'est la ligne qui maintient le travail défendable. Il ne couvre rien derrière une connexion, les données personnelles d'acheteurs ou de vendeurs, les messages privés entre utilisateurs, les données de commande ou de compte protégées par une connexion, ni aucune tentative de contourner l'authentification. Si votre projet a besoin de plus que des fiches publiques, l'API officielle ou un accord de données est le bon chemin, pas un scraper plus astucieux.
Points clés
- AliExpress construit sa grille côté client. Une simple requête renvoie une coquille vide, vous devez donc rendre la page de recherche avant de l'analyser.
-
Vous avez besoin du rendu et d'une IP de confiance ensemble. La Crawling API avec un token JS fait les deux en un seul appel ;
ajax_waitetpage_waitcontrôlent combien de temps elle attend la grille de produits. - cheerio fait l'extraction. Sélectionnez chaque carte de recherche, puis mappez le titre, le prix, la note, les commandes et l'URL du produit vers les sélecteurs actuels, et attendez-vous à ce que les noms de classe hachés d'AliExpress dérivent.
-
Passez à l'échelle en bouclant le paramètre de page. Le paramètre de requête
pageparcourt les pages de résultats, et le même analyseur fonctionne sur chaque page, puis exportez les lignes en JSON et CSV. - Restez sur les données publiques. Respectez les CGU et le robots.txt d'AliExpress, préférez l'API officielle d'Alibaba pour le volume ou l'usage commercial, et ne touchez jamais aux connexions, aux données personnelles ou aux médias protégés que vous redistribueriez.
Foire aux questions
Pourquoi une simple requête ne renvoie-t-elle aucun produit d'AliExpress ?
Parce qu'AliExpress construit ses résultats de recherche dans le navigateur avec JavaScript. Le HTML initial est une coquille quasi vide jusqu'à ce que les scripts de la page s'exécutent et rendent la grille de produits, de sorte qu'une requête HTTP brute renvoie le statut 200 sans données produit exploitables. Pour obtenir une page complète, vous devez d'abord la rendre, ce dont le token JS de la Crawling API se charge pour vous.
Ai-je besoin du token normal ou du token JS pour AliExpress ?
Utilisez le token JS. Le token normal récupère le HTML statique, qui sur AliExpress revient sans produits. Le token JS rend la page dans un vrai navigateur avant de renvoyer le HTML, de sorte que les cartes de produits sont présentes lorsque cheerio les analyse.
Comment scraper plusieurs pages de résultats de recherche AliExpress ?
AliExpress expose le numéro de page via le paramètre de requête page sur l'URL de recherche en gros. Incrémentez-le dans une boucle, récupérez chaque page via la Crawling API et exécutez le même analyseur sur chaque page. La structure de carte est identique d'une page à l'autre, donc un seul analyseur collecte toutes les lignes, que vous écrivez ensuite en JSON ou CSV.
Mes sélecteurs renvoient null. Qu'est-ce qui a changé ?
Presque certainement le balisage d'AliExpress. Ses cartes de produits utilisent des noms de classe hachés comme multi--price-sale--U-S0jtj que le site régénère lors des déploiements, donc des sélecteurs qui marchaient le mois dernier peuvent casser. Réinspectez une page en direct dans les outils de développement de votre navigateur et mettez à jour les sélecteurs. Une maintenance périodique des sélecteurs est normale pour tout scraper en production.
Puis-je scraper des données personnelles d'acheteurs ou de vendeurs sur AliExpress ?
Non, et ce guide ne le couvre pas. Les détails des acheteurs, les messages privés et les données de compte se trouvent derrière une connexion, ce ne sont donc pas des données publiques. Le nom public de la boutique sur une carte de produit peut être enregistré, mais scraper du contenu protégé par connexion, des données personnelles, ou contourner l'authentification pour y accéder est hors de portée ici et va à l'encontre des conditions d'AliExpress. Pour un accès sanctionné, le bon chemin est l'API officielle d'Alibaba ou un accord de licence.
Dois-je utiliser l'API officielle ou scraper le site ?
Si vous avez besoin de volume, d'une structure garantie ou de droits de réutilisation commerciale, utilisez l'API d'affiliation ou de plateforme ouverte officielle d'Alibaba. Elle est conçue pour cela et vous maintient du bon côté des conditions d'AliExpress. Scraper des pages publiques de recherche avec l'approche de ce guide convient à une recherche plus modeste sur données publiques où aucun accès API n'est en place, tant que vous respectez les CGU, le robots.txt et les limites de débit.
Crawlez n'importe quel site à grande échelle, sans combattre l'infrastructure.
Crawlbase gère les proxies, les empreintes et les CAPTCHA afin que votre équipe livre des pipelines de données au lieu de maintenir la plomberie de crawl. 1 000 requêtes gratuites, sans carte requise.

