AliExpress est l'une des plus grandes marketplaces grand public du web, et chaque page produit porte le type de données structurées qui alimentent le suivi des prix, l'étude de marché et l'analyse concurrentielle : un titre, un prix actuel, une note, le nombre d'unités vendues, la boutique derrière l'annonce, et les conditions de livraison. Le problème est qu'AliExpress rend ces pages dans le navigateur et repousse durement le trafic automatisé, de sorte qu'une simple requête HTTP vous renvoie une coquille presque vide au lieu des champs que vous êtes venu chercher.
Ce guide vous montre comment scraper AliExpress avec Python de façon fiable. Vous construisez un scraper léger et exécutable qui récupère une page produit entièrement rendue via la Crawling API, parse les champs voulus avec BeautifulSoup, et imprime un enregistrement structuré et propre. L'ensemble du tutoriel reste cantonné aux données publiques de produit, et la section sur la légalité vers la fin n'est pas du remplissage, alors lisez-la avant de pointer ceci sur un volume réel.
Ce que vous allez construire
Un script Python qui prend l'URL publique d'un produit AliExpress, récupère le HTML rendu via la Crawling API, et en extrait un enregistrement structuré de l'annonce. Nous utilisons une seule page produit comme exemple fil rouge et récupérons ces champs :
- Titre le nom complet du produit tel qu'il apparaît sur l'annonce.
- Prix le prix actuel, par exemple « US $3.45 ».
- Note la note moyenne des clients, par exemple « 4.8 ».
- Commandes vendues le nombre d'unités que l'annonce déclare vendues.
- Nom de la boutique la boutique du vendeur derrière le produit.
- Livraison le coût ou les conditions de livraison affichés sur la page.
Pourquoi une simple récupération échoue sur AliExpress
Si vous demandez l'URL d'un article AliExpress avec un client HTTP nu, vous obtenez généralement une réponse avec un statut 200 et presque aucun détail produit dans le corps. Deux forces jouent contre vous. D'abord, AliExpress construit le contenu de ses produits dans le navigateur avec JavaScript, donc le HTML initial est un squelette qui ne se remplit qu'après l'exécution des scripts de la page. 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 défiés, géo-redirigés ou bloqués avant même d'atteindre le contenu rendu.
Un scraper AliExpress qui fonctionne a donc besoin de deux choses en une seule requête : un navigateur qui rend réellement la page, et une IP que la plateforme lit comme celle d'un véritable acheteur. Vous pouvez assembler cela vous-même avec un navigateur sans interface plus un pool de proxies résidentiels rotatifs, mais les coudre ensemble et les maintenir en bonne santé représente l'essentiel du travail. La Crawling API réunit 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 à parser. Si vous voulez d'abord le contexte e-commerce plus large, consultez notre tour d'horizon du web scraping e-commerce.
Crawlbase propose deux types de token. Le token normal récupère du HTML statique ; le token JavaScript (JS) rend d'abord la page dans un vrai navigateur. AliExpress est rendu côté client, donc vous avez besoin du token JS ici. Utiliser le token normal renvoie à peu près le même squelette qu'une simple récupération, et il y a peu de choses à en extraire.
Prérequis
Il vous faut quelques éléments en place avant d'écrire la moindre ligne de code. Aucun ne prend longtemps.
Python de base. Vous devez être à l'aise pour écrire et exécuter un script et installer des paquets avec pip. Si vous débutez avec le parsing HTML, notre introduction sur comment utiliser BeautifulSoup en Python couvre les bases des sélecteurs sur lesquelles s'appuie ce tutoriel.
Python 3.8 ou plus récent. Confirmez votre version avec python --version. Si vous ne l'avez pas, installez-le depuis python.org ou via une distribution comme Anaconda.
Un compte Crawlbase et un token JS. Inscrivez-vous, ouvrez votre tableau de bord, et copiez votre token JavaScript (JS) depuis la page docs de votre compte. Traitez le token comme un mot de passe : il authentifie vos requêtes, alors gardez-le hors du contrôle de version.
Configurer le projet
Créez un environnement virtuel pour que les dépendances du projet restent isolées, puis installez les deux bibliothèques dont le scraper a besoin.
python --version python -m venv aliexpress_env source aliexpress_env/bin/activate pip install crawlbase beautifulsoup4
Sous Windows, activez l'environnement avec aliexpress_env\Scripts\activate au lieu de la ligne source. Deux dépendances font le travail : crawlbase est le client officiel de la Crawling API, et beautifulsoup4 parse le HTML renvoyé pour que vous puissiez extraire chaque champ par sélecteur CSS.
Étape 1 : Récupérer la page produit rendue
Commencez par obtenir la page finie. Importez la classe CrawlingAPI, initialisez-la avec votre token JS, et demandez l'URL de l'article. Vérifier le code de statut avant de parser garde les échecs bruyants plutôt que silencieux.
from crawlbase import CrawlingAPI api = CrawlingAPI({"token": "YOUR_CRAWLBASE_JS_TOKEN"}) def crawl(page_url): options = {"ajax_wait": "true", "page_wait": 8000, "country": "US"} response = api.get(page_url, options) if response["status_code"] == 200: return response["body"].decode("utf-8") print(f"Request failed: {response['status_code']}") return None if __name__ == "__main__": page_url = "https://www.aliexpress.com/item/1005006597796136.html" html = crawl(page_url) print(html[:500] if html else "No HTML returned")
Les options 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 maintient un nombre fixe de millisecondes après le chargement pour que les blocs de prix et de livraison à rendu tardif apparaissent avant la capture de la page. Huit secondes est un point de départ raisonnable pour AliExpress ; augmentez-le si des champs reviennent vides. L'option country fixe la requête à une région pour que les prix et la livraison se rendent dans une locale stable plutôt que de changer selon l'IP. Lancez le script avec python scraper.py et vous devriez voir un vrai balisage produit, pas le squelette que renvoie une simple récupération. Cela confirme que le rendu fonctionne avant d'écrire le moindre sélecteur.
AliExpress a besoin d'une page rendue derrière une IP de confiance fixée à une région, 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 : vous évitez ainsi de gérer vous-même une flotte sans interface et un pool de proxies. Pointez-la d'abord sur une page produit publique avec l'offre gratuite.
Étape 2 : Parser les champs du produit avec BeautifulSoup
Avec le HTML rendu en main, chargez-le dans BeautifulSoup et extrayez chaque champ par son sélecteur. AliExpress dispose les détails clés du produit dans une structure prévisible, vous pouvez donc associer le titre, le prix, la note, les commandes vendues, le nom de la boutique et la livraison à des sélecteurs individuels. Enveloppez l'extraction dans une fonction utilitaire pour qu'un champ manquant ne fasse pas planter l'exécution.
from bs4 import BeautifulSoup def text_of(soup, selector): el = soup.select_one(selector) return el.get_text(strip=True) if el else None def scrape_product(html): soup = BeautifulSoup(html, "html.parser") return { "title": text_of(soup, "h1[data-pl='product-title']"), "price": text_of(soup, ".product-price-current"), "rating": text_of(soup, "[data-pl='product-reviewer'] strong"), "orders_sold": text_of(soup, "[data-pl='product-reviewer'] span"), "store_name": text_of(soup, "a[data-pl='store-name']"), "shipping": text_of(soup, ".dynamic-shipping-line strong"), }
La fonction text_of fait deux choses utiles à la fois : elle interroge un seul élément et renvoie None quand l'élément est absent, au lieu de lever une erreur sur un appel .get_text() sur du vide. Cela garde l'extraction résiliente quand un champ manque sur une annonce donnée, ce qui est courant puisque tous les produits ne déclarent pas un nombre de commandes ou une ligne de livraison. Les commandes vendues et la note partagent souvent le même bloc évaluateur, donc elles sont lues depuis des éléments frères à l'intérieur.
Les noms de classes et les marqueurs data-pl d'AliExpress changent sans préavis, et ils diffèrent selon les modèles de produit et les locales. Traitez les sélecteurs ci-dessus comme un modèle de départ, pas comme un contrat. Quand un champ revient à None, réinspectez la page en direct dans les outils de développement de votre navigateur et mettez le sélecteur à jour. Une maintenance périodique des sélecteurs est normale pour tout scraper en production, pas le signe que quelque chose est cassé.
Étape 3 : Tout assembler
Reliez maintenant la récupération et le parsing en un seul script exécutable. Récupérez le HTML rendu, passez-le au parseur, et imprimez l'enregistrement structuré.
import json from crawlbase import CrawlingAPI from bs4 import BeautifulSoup api = CrawlingAPI({"token": "YOUR_CRAWLBASE_JS_TOKEN"}) def crawl(page_url): options = {"ajax_wait": "true", "page_wait": 8000, "country": "US"} response = api.get(page_url, options) if response["status_code"] == 200: return response["body"].decode("utf-8") print(f"Request failed: {response['status_code']}") return None def text_of(soup, selector): el = soup.select_one(selector) return el.get_text(strip=True) if el else None def scrape_product(html): soup = BeautifulSoup(html, "html.parser") return { "title": text_of(soup, "h1[data-pl='product-title']"), "price": text_of(soup, ".product-price-current"), "rating": text_of(soup, "[data-pl='product-reviewer'] strong"), "orders_sold": text_of(soup, "[data-pl='product-reviewer'] span"), "store_name": text_of(soup, "a[data-pl='store-name']"), "shipping": text_of(soup, ".dynamic-shipping-line strong"), } def main(): page_url = "https://www.aliexpress.com/item/1005006597796136.html" html = crawl(page_url) if not html: return data = scrape_product(html) print(json.dumps(data, indent=2)) if __name__ == "__main__": main()
À quoi ressemble la sortie
Lancez le script complet avec python scraper.py et vous obtenez un enregistrement structuré propre pour le produit, prêt à être écrit en JSON, CSV ou dans une base de données.
{ "title": "Wireless Bluetooth Earbuds Noise Cancelling Touch Control", "price": "US $12.74", "rating": "4.7", "orders_sold": "3,210 sold", "store_name": "TechGear Official Store", "shipping": "Free shipping" }
Passer à l'échelle sur de nombreux produits
Un produit est une démo ; un vrai travail s'exécute sur une liste d'articles. La forme reste la même : gardez une liste d'URL de produits, récupérez chacune via la Crawling API, parsez-la avec la même fonction, et collectez les lignes. Comme toutes les pages produit partagent la même structure, le parseur que vous avez déjà écrit fonctionne pour toutes sans changement. La seule habitude à ajouter est la cadence, pour ne pas parcourir la liste dans une boucle serrée.
import time import random products = [ "https://www.aliexpress.com/item/1005006597796136.html", "https://www.aliexpress.com/item/1005005899876543.html", ] results = [] for url in products: html = crawl(url) if html: results.append(scrape_product(html)) time.sleep(random.uniform(2, 5)) with open("products.json", "w") as f: json.dump(results, f, indent=2)
Le sleep aléatoire entre les requêtes étale votre trafic au lieu de tirer selon un rythme prévisible. Pour rassembler des URL de produits à grande échelle, scrapez les pages de recherche et de catégorie d'AliExpress avec le même motif récupérer-puis-parser, collectez les liens d'articles, puis visitez chacun. Gardez le volume raisonnable et respectez les limites de débit abordées plus bas.
Rester débloqué
Même avec le rendu pris en charge, AliExpress guette le trafic en forme de scraper. Quelques habitudes gardent une exécution saine, et elles s'appliquent à toute cible commerciale difficile.
- Cadencez vos requêtes. Marteler les pages d'articles dans une boucle serrée est le moyen le plus rapide de se faire limiter. Étalez les requêtes, ajoutez de la variation, et variez vos cibles plutôt que de crawler un seul chemin à plein régime.
- 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 à bien faire.
-
Fixez la région. AliExpress change les prix, la devise et la livraison selon la localisation. Définir un
countrycohérent garde vos enregistrements comparables et évite les boucles de redirection qui frappent les IP incohérentes. - Lisez les codes de statut. Une exécution qui se met à renvoyer des défis ou des erreurs vous dit que le débit ou le palier d'IP actuel ne suffit plus. Traitez cela comme un signal pour lever le pied, pas comme un bruit à ignorer.
Pour le manuel plus large, voyez comment scraper des sites web sans se faire bloquer et l'analyse plus poussée sur comment contourner les captchas en web scraping. Il existe aussi un tutoriel ciblé sur l'utilisation du scraping AliExpress par proxy si vous voulez en savoir plus côté proxy. Si vous préférez router votre propre trafic via un pool rotatif plutôt que d'utiliser l'API gérée, le Smart AI Proxy (aussi appelé l'AI Proxy) vous donne la même rotation d'IP résidentielles sous la forme d'un point de terminaison proxy prêt à l'emploi.
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 quel que soit le soin apporté à votre outillage. Aucun code ici ne change cela ; il fait juste 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 à respecter. Ne collectez que des données publiques de produit : le titre, le prix actuel, la note, les commandes vendues, le nom de la boutique et les conditions de livraison 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 tout ce qui est lié à des personnes identifiables, y compris les données personnelles d'acheteurs ou de vendeurs au-delà du nom de boutique public d'une annonce. Si vous prévoyez de réutiliser les données commercialement, obtenez une autorisation ou un accord officiel plutôt que de supposer que le silence vaut consentement.
Ce guide est délibérément cantonné aux pages produit publiques car c'est la ligne qui garde le travail défendable. Il ne couvre rien derrière une connexion, ni les données personnelles d'acheteurs ou de vendeurs, ni les données privées de commande ou de compte, ni aucune tentative de contourner l'authentification. Pour un accès sous licence ou en masse, AliExpress et la plateforme Alibaba plus large offrent des API officielles et des accords de données, et c'est le bon outil quand vous avez besoin de gros volumes, d'une structure garantie ou de droits commerciaux. Si votre projet a besoin de plus que des données publiques de produit, une API officielle ou un accord de données est la voie correcte, pas un scraper plus astucieux.
Points clés
- AliExpress est rendu côté client. Une simple récupération renvoie un squelette presque vide, vous devez donc rendre la page avant de la parser.
-
Il vous faut le rendu et une IP de confiance ensemble. La Crawling API avec un token JS fait les deux en un seul appel ;
ajax_wait,page_waitetcountrycontrôlent comment elle attend et où elle rend. - BeautifulSoup fait l'extraction. Associez le titre, le prix, la note, les commandes vendues, le nom de la boutique et la livraison aux sélecteurs actuels, et attendez-vous à ce que ces sélecteurs dérivent.
- Passez à l'échelle en bouclant sur les URL avec une cadence. Le même parseur fonctionne pour chaque produit, donc un vrai travail n'est qu'une liste de liens d'articles plus des délais variés et de la rotation.
- Restez sur les données publiques. Respectez les CGU et le robots.txt d'AliExpress, préférez une API officielle pour des données sous licence ou en masse, et ne touchez jamais aux connexions, aux données de commande ni aux informations personnelles.
Foire aux questions
Pourquoi une simple récupération ne renvoie-t-elle aucune donnée produit depuis AliExpress ?
Parce qu'AliExpress construit le contenu de ses produits dans le navigateur avec JavaScript. Le HTML initial est un squelette qui ne se remplit qu'après l'exécution des scripts de la page, donc une requête HTTP brute renvoie un statut 200 avec le prix, la note et la livraison vides. Pour obtenir de vraies données, vous devez d'abord rendre la page, ce dont se charge pour vous le token JS de la Crawling API.
Ai-je besoin du token normal ou du token JS pour AliExpress ?
Le token JS. Le token normal récupère du HTML statique, qui sur AliExpress est à peu près le même squelette que renvoie une simple récupération. Le token JS rend la page dans un vrai navigateur avant de renvoyer le HTML, donc les champs du produit sont présents quand BeautifulSoup les parse.
Mes sélecteurs renvoient None. Qu'est-ce qui a changé ?
Presque certainement le balisage d'AliExpress. Ses noms de classes et ses marqueurs data-pl changent sans préavis et diffèrent selon les modèles de produit et les locales, donc des sélecteurs qui marchaient le mois dernier peuvent casser. Réinspectez une page produit en direct dans les outils de développement de votre navigateur et mettez les sélecteurs à jour. Une maintenance périodique des sélecteurs est normale pour tout scraper en production.
Comment garder les prix et la livraison cohérents d'une exécution à l'autre ?
Fixez la région avec l'option country sur chaque requête. AliExpress fait varier le prix, la devise et la livraison selon la localisation, donc une exécution non fixée qui tourne entre les pays produit des enregistrements que vous ne pouvez pas comparer. Définir un pays cohérent évite aussi les boucles de géo-redirection qui frappent les IP incohérentes.
Comment éviter de me faire bloquer en scrapant AliExpress ?
Gardez votre débit de requêtes par IP bas, ajoutez de la variation entre les requêtes, variez vos cibles plutôt que de boucler sur un seul chemin, et routez via des IP résidentielles rotatives pour qu'aucune seule adresse ne déclenche une limite de débit. La Crawling API gère la rotation et un pool d'IP de confiance pour vous ; si vous construisez votre propre pile, c'est la partie où investir. Surveillez les codes de statut et levez le pied quand vous commencez à voir des défis.
Puis-je scraper les prix d'AliExpress pour fixer le prix de mes propres produits ?
Utiliser des données de prix publiques pour une analyse de marché est un cas d'usage courant, mais il se situe à l'intérieur des conditions d'utilisation d'AliExpress et de vos réglementations locales, alors confirmez les deux avant d'en faire la base de votre projet. Tenez-vous-en aux données publiques de produit, gardez votre volume modeste, et pour un accès sous licence ou en masse utilisez une API officielle ou un accord de données plutôt que de scraper à grande échelle.
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.
