Alibaba.com est l'une des plus grandes places de marché B2B au monde, référençant des produits dans plus de 40 catégories provenant de fournisseurs de dizaines de pays. Pour quiconque fait du sourcing, de la recherche de prix ou de l'analyse concurrentielle, les résultats de recherche publics constituent un signal dense : chaque requête retourne des titres de produits, des fourchettes de prix, des quantités minimales de commande, des noms de fournisseurs et les liens qui les relient. Extraire ces données dans un jeu de données structuré transforme une navigation manuelle en quelque chose que vous pouvez trier, comparer et suivre dans le temps.

Ce guide vous montre comment extraire les résultats de recherche Alibaba avec Node.js de manière fiable. Vous construisez un petit scraper fonctionnel qui récupère un SERP rendu via la Crawling API, analyse chaque fiche produit avec Cheerio, gère la pagination et exporte du JSON et du CSV propres. Le tutoriel reste délibérément limité aux données de résultats de recherche publiques visibles par tout le monde sans compte, et la section légalité vers la fin n'est pas du remplissage, alors lisez-la avant de pointer cela sur un volume réel.

Ce que vous allez construire

Un script Node.js qui prend une URL de recherche Alibaba publique, récupère le HTML via la Crawling API et extrait un enregistrement structuré pour chaque fiche produit sur la page. Nous utiliserons un exemple de requête fil conducteur et extrairons ces champs de chaque résultat :

  • Titre le titre du produit tel qu'affiché dans la fiche de liste.
  • Prix le prix affiché ou la fourchette de prix pour le produit.
  • Commande minimale la quantité minimale de commande ou le texte de caractéristique de vente défini par le fournisseur.
  • Fournisseur le nom du magasin ou de l'entreprise derrière la liste.
  • Lien l'URL de destination de la page de détail du produit.
  • Lien boutique l'URL du profil d'entreprise du fournisseur.

Pourquoi une simple requête échoue sur Alibaba

Si vous envoyez une simple requête HTTP vers une URL de recherche Alibaba depuis un script, vous obtenez rarement la page propre que vous voyez dans votre propre navigateur. Deux facteurs jouent contre vous. Premièrement, une grande partie du SERP est assemblée par JavaScript après le chargement du HTML initial, de sorte qu'une simple requête peut retourner une coquille sans les fiches produits. Deuxièmement, Alibaba surveille le trafic automatisé : les requêtes qui ne ressemblent pas à un vrai navigateur sont défied, reçoivent un CAPTCHA ou sont bloquées avant d'atteindre les annonces.

Un scraper Alibaba fonctionnel a donc besoin de deux choses en une seule requête : une IP que la plateforme reconnaît comme un visiteur réel et un navigateur qui rende la page lorsqu'elle s'appuie sur des scripts. Vous pouvez assembler cela vous-même avec un navigateur headless et un pool de proxies résidentiels rotatifs, mais les maintenir en bon état représente l'essentiel du travail. La Crawling API regroupe les deux en un seul appel : vous lui envoyez l'URL, elle récupère depuis une IP de confiance et effectue le rendu si nécessaire, puis vous retourne le HTML terminé à analyser avec une bibliothèque légère comme Cheerio.

Pourquoi la rotation est importante ici

Alibaba est l'une des places de marché les plus protégées, donc une seule IP de datacenter envoyant des requêtes SERP répétées est un signal immédiat. La Crawling API fait tourner les adresses de datacenter et résidentielles côté serveur et gère les CAPTCHAs pour vous, vous évitant ainsi de sourcer et de maintenir ce pool vous-même. Vous pouvez commencer avec jusqu'à 20 000 requêtes gratuites, sans carte bancaire.

Prérequis

Vous avez besoin de quelques éléments en place avant d'écrire du code. Aucun ne prend beaucoup de temps.

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 êtes novice en scraping dans cet environnement, notre guide sur comment construire un web scraper avec Node.js couvre les bases que ce tutoriel suppose acquises.

Node.js 14 ou ultérieur. Vérifiez votre version avec node -v. Si vous ne l'avez pas, installez-le depuis nodejs.org.

Un compte Crawlbase et un token. Inscrivez-vous, ouvrez votre tableau de bord et copiez votre token de requête depuis la page de documentation du compte. Vous obtenez jusqu'à 20 000 requêtes gratuites. 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 répertoire de projet et installez les deux bibliothèques dont le scraper a besoin.

bash
mkdir alibaba-serp-scraper
cd alibaba-serp-scraper

npm init -y
npm install crawlbase cheerio

Deux dépendances font le travail : crawlbase est le client officiel qui envoie la requête à la Crawling API, et cheerio est un parseur HTML rapide de style jQuery qui vous permet d'extraire des champs individuels par sélecteur CSS. Créez un fichier nommé index.js dans ce répertoire ; c'est là que va le code du scraper.

Étape 1 : Récupérer la page via la Crawling API

Commencez par obtenir le HTML. Initialisez le client de la Crawling API avec votre token, pointez-le sur une URL de recherche Alibaba publique et confirmez que la page revient avant d'écrire un seul sélecteur. Le client CrawlingAPI retourne une réponse dont le body contient le HTML rendu.

javascript
const { CrawlingAPI } = require('crawlbase');

// Replace with your token from the Crawlbase dashboard
const api = new CrawlingAPI({ token: 'YOUR_CRAWLBASE_TOKEN' });

const alibabaSerpURL =
  'https://www.alibaba.com/trade/search?SearchText=samsung+s24+ultra';

api
  .get(alibabaSerpURL)
  .then((response) => {
    // original_status is the status Alibaba itself returned
    console.log('Status:', response.originalStatus);
    console.log(response.body.slice(0, 500));
  })
  .catch((error) => {
    console.error('Request failed:', error);
  });

L'exemple de requête est samsung+s24+ultra, transmis dans le paramètre SearchText, qui est la façon dont la recherche commerciale d'Alibaba transmet un terme de recherche. Exécutez le script avec node index.js et vous devriez voir un statut 200 et de vraies balises produit dans les 500 premiers caractères. Cela confirme que la récupération fonctionne, avec la page rendue et la requête acceptée, avant de vous engager dans une logique d'analyse. Vérifier originalStatus rend une restriction régionale ou un blocage visible au lieu d'alimenter silencieusement une page d'erreur dans le parseur.

Crawlbase Crawling API

Ce statut 200 ne revient que parce que la requête a atteint Alibaba comme un visiteur réel. La Crawling API récupère le SERP depuis une IP rotative, rend les fiches produits construites par JavaScript et résout les CAPTCHAs côté serveur, puis vous remet le HTML terminé, vous évitant ainsi de gérer une flotte de navigateurs headless et de sourcer un pool de proxies résidentiels. Pointez-la sur une URL de recherche publique avec le niveau gratuit d'abord.

Étape 2 : Analyser les fiches produits avec Cheerio

HTML en main, chargez-le dans Cheerio et extrayez chaque produit par son sélecteur. Alibaba encapsule chaque annonce dans une fiche sous le conteneur de liste d'offres, avec le titre, le prix, la quantité minimale de commande et le fournisseur chacun dans leur propre élément à l'intérieur de la fiche. Inspectez la page en direct dans les outils de développement de votre navigateur (clic droit, puis Inspecter) pour confirmer les noms de classe actuels ; les sélecteurs ci-dessous correspondent à la mise en page au moment de la rédaction.

javascript
const cheerio = require('cheerio');

// Alibaba serves protocol-relative URLs (//...); normalise them to https
function toHttps(href) {
  if (!href) return null;
  return href.includes('http') ? href : `https:${href}`;
}

function parseSerp(html) {
  const $ = cheerio.load(html);
  const results = [];

  const numberOfResults = $('.seb-refine-result_all').text().trim();

  $('.offer-list-wrapper .J-search-card-wrapper').each((index, element) => {
    const card = $(element);

    const title = card.find("[data-spm='d_title']").text().trim();
    const url = card.find("[data-spm='d_title']").attr('href');
    const price = card.find('.search-card-e-price-main').text().trim();
    const minItem = card.find('.search-card-m-sale-features__item').text().trim();
    const storeName = card.find('.search-card-e-company').text().trim();
    const storeLink = card.find('.search-card-e-company').attr('href');
    const image = card.find('.search-card-e-slider__img').attr('src');
    const reviews = card.find('.search-card-e-review').text().trim();

    if (!title) return;

    results.push({
      position: index + 1,
      title,
      price,
      minItem,
      storeName,
      reviews,
      url: toHttps(url),
      storeLink: toHttps(storeLink),
      image: toHttps(image),
    });
  });

  return { numberOfResults, results };
}

module.exports = { parseSerp };

Le conteneur .offer-list-wrapper .J-search-card-wrapper sélectionne chaque fiche produit. À l'intérieur de chaque fiche, le titre et son URL produit viennent de l'ancre [data-spm='d_title'], le prix de .search-card-e-price-main, le texte de quantité minimale de commande de .search-card-m-sale-features__item, et le nom et lien de profil du fournisseur de .search-card-e-company. Alibaba retourne beaucoup de ses liens en relatif au protocole (commençant par //), le petit assistant toHttps préfixe donc https: quand la valeur n'est pas déjà absolue. La garde if (!title) return; ignore les fiches vides ou non-produits pour que les tuiles promotionnelles ne polluent pas la sortie. L'élément .seb-refine-result_all contient le nombre total de résultats affiché en haut de la page.

Les sélecteurs évoluent

Les noms de classe d'Alibaba, comme J-search-card-wrapper et search-card-e-price-main, changent quand le frontend est redéployé. Traitez les sélecteurs ci-dessus comme un modèle de départ, non comme un contrat. Quand un champ revient vide pour chaque fiche, réinspectez une page en direct dans les outils de développement de votre navigateur et mettez à jour le sélecteur. La 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 3 : Tout assembler et exporter

Maintenant reliez la récupération et l'analyse en un seul script exécutable. Crawlez le SERP rendu, transmettez le HTML au parseur, puis écrivez la sortie structurée en JSON et CSV pour que les données soient prêtes pour un tableur ou une base de données.

javascript
const { CrawlingAPI } = require('crawlbase');
const cheerio = require('cheerio');
const fs = require('fs');

const api = new CrawlingAPI({ token: 'YOUR_CRAWLBASE_TOKEN' });

function toHttps(href) {
  if (!href) return null;
  return href.includes('http') ? href : `https:${href}`;
}

function parseSerp(html) {
  const $ = cheerio.load(html);
  const results = [];
  const numberOfResults = $('.seb-refine-result_all').text().trim();

  $('.offer-list-wrapper .J-search-card-wrapper').each((index, element) => {
    const card = $(element);
    const title = card.find("[data-spm='d_title']").text().trim();
    if (!title) return;

    results.push({
      position: index + 1,
      title,
      price: card.find('.search-card-e-price-main').text().trim(),
      minItem: card.find('.search-card-m-sale-features__item').text().trim(),
      storeName: card.find('.search-card-e-company').text().trim(),
      reviews: card.find('.search-card-e-review').text().trim(),
      url: toHttps(card.find("[data-spm='d_title']").attr('href')),
      storeLink: toHttps(card.find('.search-card-e-company').attr('href')),
      image: toHttps(card.find('.search-card-e-slider__img').attr('src')),
    });
  });

  return { numberOfResults, results };
}

function toCsv(results) {
  const headers = ['position', 'title', 'price', 'minItem', 'storeName', 'url'];
  const escape = (v) => `"${(v || '').toString().replace(/"/g, '""')}"`;
  const rows = results.map((r) =>
    headers.map((h) => escape(r[h])).join(',')
  );
  return [headers.join(','), ...rows].join('\n');
}

async function main() {
  const url =
    'https://www.alibaba.com/trade/search?SearchText=samsung+s24+ultra';
  const response = await api.get(url);

  if (response.originalStatus !== 200) {
    throw new Error(`Unable to crawl, status ${response.originalStatus}`);
  }

  const data = parseSerp(response.body);
  fs.writeFileSync('alibaba-serp.json', JSON.stringify(data, null, 2));
  fs.writeFileSync('alibaba-serp.csv', toCsv(data.results));
  console.log(`Saved ${data.results.length} products`);
}

main().catch((error) => console.error(error));

Exécutez le script complet avec node index.js. Il récupère le SERP pour "samsung s24 ultra", extrait un enregistrement pour chaque fiche produit et écrit tout dans alibaba-serp.json et alibaba-serp.csv. Le JSON conserve la structure imbriquée avec le nombre de résultats, tandis que le CSV aplatit les champs de sourcing principaux en lignes que vous pouvez intégrer directement dans un tableur. Changez la requête dans l'URL et les deux mêmes fonctions gèrent ce qui revient.

À quoi ressemble la sortie

Vous obtenez un objet propre avec le nombre total de résultats et une liste ordonnée de produits, chacun portant le titre, le prix, la quantité minimale de commande, le fournisseur, les liens et l'image.

json
{
  "numberOfResults": "3,000+ products found",
  "results": [
    {
      "position": 1,
      "title": "Mobile Phone Case For Samsung Galaxy S24 Ultra Plus Tpu Pc Shockproof Covers",
      "price": "US$1.29 - US$1.69",
      "minItem": "Min. order: 50 pieces",
      "storeName": "Guangzhou Junbo Electronic Co., Ltd.",
      "reviews": "4.9/5.0 (68)",
      "url": "https://www.alibaba.com/product-detail/Mobile-Phone-Case_1600969904884.html",
      "storeLink": "https://gzjunbo.en.alibaba.com/company_profile.html",
      "image": "https://s.alicdn.com/@sc04/kf/Hcdcc7db446e9420f9378c0ec3482037bk.png_300x300.png"
    },
    {
      "position": 2,
      "title": "Cellphone Original S24 Ultra 16GB+512GB Smartphone 7inch Unlocked 5G",
      "price": "US$43.42 - US$54.47",
      "minItem": "Min. order: 1 piece",
      "storeName": "Dongguan Zhongfu Electronic Technology Co., Ltd.",
      "reviews": "3.3/5.0 (197)",
      "url": "https://www.alibaba.com/product-detail/Hot-selling-S24-Ultra_1600969407142.html",
      "storeLink": "https://fukadi.en.alibaba.com/company_profile.html",
      "image": "https://s.alicdn.com/@sc04/kf/H771126c0475c4a3d9ee7842740b0cf4an.jpg_300x300.jpg"
    }
  ]
}

Cette structure est ce qui rend les données Alibaba utiles pour le travail B2B : les fourchettes de prix et les quantités minimales de commande alimentent les comparaisons de sourcing, les noms de fournisseurs et les liens de boutiques permettent de présélectionner des vendeurs, et les chaînes d'avis donnent un signal de qualité approximatif par annonce. Pour plus d'informations sur la transformation des données de place de marché en décisions tarifaires, voir notre guide sur le web scraping pour l'intelligence des prix.

Mise à l'échelle sur plusieurs pages et requêtes

Une requête sur une page est une démonstration ; un vrai travail de sourcing couvre plusieurs recherches et va plus loin dans les résultats. La recherche commerciale d'Alibaba pagine avec le paramètre de requête page, donc page=2 est la deuxième page, page=3 la troisième, et ainsi de suite. La structure reste la même : construisez chaque URL, récupérez-la via la Crawling API et analysez-la avec la même fonction. L'habitude qui maintient une longue exécution saine est le rythme, donc marquez une pause entre les requêtes plutôt que de les envoyer en boucle serrée.

javascript
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));

async function scrapeQuery(searchText, pages = 3) {
  const encoded = encodeURIComponent(searchText).replace(/%20/g, '+');
  const allResults = [];

  for (let page = 1; page <= pages; page++) {
    const url =
      `https://www.alibaba.com/trade/search?SearchText=${encoded}&page=${page}`;
    const response = await api.get(url);
    if (response.originalStatus === 200) {
      allResults.push(...parseSerp(response.body).results);
    }
    await sleep(3000);
  }

  console.log(`Collected ${allResults.length} products across ${pages} pages`);
  return allResults;
}

Crawlbase sert jusqu'à 20 requêtes par seconde par défaut, ce qui offre une marge suffisante pour un scraper qui s'auto-régule ; si vous avez genuinement besoin de plus, le support peut l'augmenter. Toute réponse 5XX de l'API est gratuite, donc réessayer une URL bloquée ou indisponible ne vous coûte rien. Si vous préférez router votre propre trafic via un pool rotatif plutôt qu'utiliser l'API gérée, le Smart AI Proxy vous offre la même rotation IP comme endpoint proxy plug-and-play. Pour le guide complet des places de marché, notre article sur le web scraping e-commerce couvre les modèles qui s'appliquent à travers les sites.

Rester non bloqué

Même avec une IP de confiance gérée, Alibaba surveille le trafic à l'allure d'un scraper, et ses pages de place de marché sont à rendu intensif, quelques habitudes maintiennent donc une exécution saine.

  • Espacez vos requêtes. Marteler les pages de recherche en boucle serrée est le moyen le plus rapide d'être mis en défi. Répartissez les requêtes et variez vos requêtes au lieu de paginer un terme à pleine vitesse.
  • Misez sur la rotation. Un pool d'IP rotatives répartit les requêtes sur de nombreuses adresses afin qu'aucune ne déclenche une limite. La Crawling API gère cela pour vous ; si vous construisez votre propre pile, c'est la partie à soigner.
  • Effectuez le rendu quand les fiches sont manquantes. Si les fiches produits reviennent vides, la page avait besoin de JavaScript pour les construire. Activez l'option de rendu de la Crawling API pour que le SERP soit récupéré comme un vrai navigateur le chargerait. Notre guide sur crawler des sites web JavaScript explique quand c'est nécessaire.
  • Réinspectez quand les champs deviennent vides. Alibaba change périodiquement son balisage. Si les fiches ne se parsent plus, ouvrez une page en direct dans les outils de développement et mettez à jour les sélecteurs.

Pour le guide complet, voir comment scraper des sites web sans être bloqué.

Est-il légal de scraper Alibaba ?

La question de savoir si le scraping d'Alibaba est autorisé dépend des conditions d'utilisation d'Alibaba, de votre juridiction et de l'usage que vous faites des données. Les conditions d'Alibaba placent des limites sur l'accès automatisé, de sorte que le scraping peut aller à l'encontre de ces conditions quelle que soit la prudence de vos outils. Aucun code ici ne change cela ; il fait simplement fonctionner la partie technique. Lisez les conditions d'Alibaba et son robots.txt, et traitez les deux comme les limites de ce que vous collectez.

Quelques lignes à tenir. Collectez uniquement les données de résultats de recherche publics : les titres de produits, les prix, les quantités minimales de commande, les noms de fournisseurs et les liens que tout le monde peut voir sur un SERP sans compte. Gardez votre volume de requêtes suffisamment bas pour ne pas solliciter les serveurs d'Alibaba, et réglez votre crawl plutôt que de le lancer à pleine vitesse. Ne scrapez pas les coordonnées d'acheteurs ou de fournisseurs, les messages ou quoi que ce soit derrière une connexion, et ne redistribuez pas les images ou descriptions de produits comme si elles étaient les vôtres.

Ce guide est délibérément limité aux pages de résultats de recherche publics car c'est la ligne qui rend le travail défendable. Alibaba exploite une Open Platform avec des API officielles pour les partenaires qui ont besoin d'un accès sanctionné et à volume élevé aux données produits et fournisseurs, et c'est le bon chemin quand un projet dépasse le scraping de pages publiques. Pour tout ce qui implique des données personnelles, du contenu réservé aux comptes ou des médias protégés par droits d'auteur que vous comptez republier, un accord officiel de données est la bonne voie, pas un scraper plus sophistiqué.

Récapitulatif

Points clés

  • Les simples requêtes sont insuffisantes. Alibaba construit son SERP avec JavaScript et défie le trafic ressemblant à un bot, vous avez donc besoin du rendu et d'une IP de confiance rotative pour obtenir les vraies fiches produits.
  • La Crawling API récupère derrière une vraie IP. Envoyez-lui l'URL, elle fait tourner les IP côté serveur, rend les fiches et résout les CAPTCHAs, puis retourne le HTML terminé à analyser.
  • Cheerio fait l'extraction. Sélectionnez chaque .J-search-card-wrapper, puis lisez le titre, le prix, la quantité minimale de commande, le fournisseur et les liens, et attendez-vous à ce que les noms de classe évoluent.
  • Paginez avec le paramètre page et exportez les deux formats. Incrémentez page pour aller plus loin, rythmez avec une pause, et écrivez du JSON pour la structure et du CSV pour les tableurs.
  • Restez sur les données publiques. Respectez les CGU et robots.txt d'Alibaba, gardez le volume faible, ne touchez jamais aux données de contact ou de compte, et utilisez l'API officielle Open Platform quand vous dépassez le scraping de pages publiques.

Foire aux questions

Pourquoi une simple requête échoue-t-elle ou retourne-t-elle une page vide sur Alibaba ?

Alibaba assemble une grande partie de sa page de résultats de recherche avec JavaScript après le chargement du HTML initial, de sorte qu'une simple requête peut retourner une coquille sans les fiches produits. Il marque également le trafic qui ne ressemble pas à un vrai navigateur et peut servir un CAPTCHA ou bloquer. Récupérer via la Crawling API, qui rend la page et utilise des IP rotatives, fait que la requête ressemble à un visiteur ordinaire et vous obtenez les vraies annonces produits.

Puis-je extraire les résultats de recherche Alibaba avec Node.js ?

Oui. Avec le client Crawlbase et Cheerio vous pouvez récupérer un SERP et extraire les titres, prix, quantités minimales de commande, fournisseurs et liens. La Crawling API sert de pont qui amène votre requête à Alibaba depuis une IP de confiance et rend la page, de sorte que les requêtes sont traitées sans problème au lieu d'être bloquées. Pour un aperçu plus complet, voir notre guide sur comment construire un web scraper avec Node.js.

Quels champs puis-je extraire d'un SERP Alibaba ?

Ce tutoriel extrait le titre du produit, le prix, la quantité minimale de commande, le nom du fournisseur, le lien produit, le lien boutique, l'image et la chaîne d'avis de chaque fiche, ainsi que le nombre total de résultats pour la requête. Restez dans les données de résultats de recherche publics et évitez tout ce qui est derrière une connexion, y compris les coordonnées des fournisseurs et le contenu réservé aux comptes.

Ai-je besoin du rendu JavaScript pour scraper Alibaba ?

Souvent oui, car les fiches produits sont construites par des scripts après le chargement de la page. Si une simple requête retourne une liste d'offres vide, activez l'option de rendu JavaScript de la Crawling API pour que la page soit récupérée comme un vrai navigateur la chargerait. Notre guide sur crawler des sites web JavaScript explique quand c'est nécessaire.

Comment paginer pour obtenir plus de résultats Alibaba ?

Utilisez le paramètre de requête page : page=2 est la deuxième page, page=3 la troisième, et ainsi de suite. Construisez chaque URL de page, récupérez-la via la Crawling API, analysez-la avec la même fonction et marquez une pause de quelques secondes entre les requêtes pour rythmer le crawl plutôt que de le marteler.

Mes sélecteurs ne retournent rien. Qu'est-ce qui a changé ?

Très probablement le balisage d'Alibaba. Les noms de classe comme J-search-card-wrapper et search-card-e-price-main changent quand Alibaba redéploie son frontend, de sorte que les sélecteurs qui fonctionnaient le mois dernier peuvent casser. Réinspectez un SERP en direct dans les outils de développement de votre navigateur et mettez à jour les sélecteurs. La maintenance périodique des sélecteurs est normale pour tout scraper en production.

Commencer à construire

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.

En libre-service · Sans appel commercial requis · Volumes de crawl entreprise disponibles