Flipkart est l'une des plus grandes plateformes de commerce électronique en Inde, et chaque page produit contient le type de détails structurés qui alimente le suivi des prix, la surveillance concurrentielle et la recherche de catalogue : un nom de produit, le prix actuel, une note par étoiles, un nombre d'avis et un bloc de spécifications et de points forts. Le problème est que Flipkart rend ces pages dans le navigateur et les défend contre le trafic automatisé, de sorte qu'une requête HTTP simple vous renvoie une coquille quasi vide à la place des champs recherchés.

Ce guide vous montre comment scraper Flipkart de façon fiable avec Python. Vous construirez un petit script fonctionnel qui récupère une page produit rendue via la Crawling API, analyse les champs souhaités avec BeautifulSoup et affiche un enregistrement structuré propre. L'ensemble du tutoriel se limite aux données produit publiques, et la section sur la légalité près de la fin n'est pas du remplissage, lisez-la avant de pointer ceci sur un volume réel.

Ce que vous allez construire

Un script Python qui prend une URL de produit Flipkart publique, récupère le HTML rendu via la Crawling API, et extrait un enregistrement structuré du produit. Nous utiliserons une page produit unique comme exemple fil rouge et extrairons ces champs :

  • Name le titre du produit, par exemple un modèle de casque et sa ligne de spécification clé.
  • Price le prix de vente actuel affiché sur la page.
  • Rating la note moyenne par étoiles, comme "4.3".
  • Review count le nombre de notes ou d'avis du produit.
  • Highlights la liste à puces des spécifications clés que Flipkart affiche près du haut de la page.

Pourquoi une requête simple échoue sur Flipkart

Si vous demandez une URL de produit Flipkart avec un client HTTP brut, vous obtenez une réponse à laquelle manquent la plupart des données visibles dans un navigateur. Deux éléments jouent contre vous. Premièrement, Flipkart construit une grande partie de son contenu produit côté client avec JavaScript, donc le HTML initial est maigre et ne se remplit qu'une fois que les scripts de la page s'exécutent. Deuxièmement, Flipkart détecte rapidement le trafic automatisé : les IP de centres de données et les schémas de requêtes qui ne ressemblent pas à un vrai navigateur sont challengés ou reçoivent une page allégée avant d'atteindre le détail complet du produit.

Un scraper Flipkart fonctionnel 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 considère comme un vrai visiteur. Vous pouvez assembler cela vous-même avec un navigateur sans interface graphique et un pool de proxies résidentiels rotatifs, mais les assembler et 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 avec un token JavaScript, elle rend la page derrière une IP de confiance, et vous retourne le HTML final prêt à analyser.

Why the JS token

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. Flipkart s'appuie sur le rendu côté client pour le détail produit, donc le token JS est le choix sûr par défaut ici. Le token normal peut renvoyer une page plus mince où le prix, la note ou les points forts sont absents, et il n'y a rien à analyser dans ce cas.

Prérequis

Quelques éléments doivent être en place avant d'écrire du code. Aucun ne prend longtemps.

Notions de base en Python. Vous devez être à l'aise pour écrire et exécuter un script Python et installer des paquets avec pip. Si vous débutez avec ce langage, la documentation officielle Python et tout cours pour débutants vous amèneront au niveau supposé par ce tutoriel.

Python 3.8 ou version ultérieure. Vérifiez 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). Traitez le token comme un mot de passe : il authentifie vos requêtes, donc ne le committez pas dans votre système de contrôle de version.

Configurer le projet

Créez un environnement virtuel pour isoler les dépendances du projet, puis installez les deux bibliothèques dont le scraper a besoin.

bash
python --version

python -m venv flipkart_env
source flipkart_env/bin/activate

pip install crawlbase beautifulsoup4

Sous Windows, activez l'environnement avec flipkart_env\Scripts\activate à la place de la ligne source. Deux dépendances font le travail : crawlbase est le client officiel pour la Crawling API, et beautifulsoup4 analyse le HTML renvoyé pour que vous puissiez extraire les champs individuels par sélecteur CSS. Si BeautifulSoup vous est nouveau, le guide BeautifulSoup couvre les bases sur lesquelles ce tutoriel s'appuie.

Étape 1 : Récupérer la page produit rendue

Commencez par obtenir la page finale. Importez la classe CrawlingAPI, initialisez-la avec votre token JS et demandez l'URL du produit. Vérifier le code de statut avant d'analyser permet de rendre les échecs visibles plutôt que silencieux.

python
from crawlbase import CrawlingAPI

api = CrawlingAPI({"token": "YOUR_CRAWLBASE_JS_TOKEN"})

def crawl(page_url):
    options = {"ajax_wait": "true", "page_wait": 5000}
    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.flipkart.com/oneplus-bullets-wireless-z2-bluetooth-headset/p/itm4c3852314bb61"
    html = crawl(page_url)
    print(html[:500] if html else "No HTML returned")

Les deux options d'attente sont importantes pour une cible à rendu client comme celle-ci. ajax_wait indique à l'API d'attendre que le contenu asynchrone finisse de se charger, et page_wait maintient l'attente un nombre fixe de millisecondes après le chargement pour que les éléments à rendu tardif apparaissent avant la capture de la page. Cinq secondes est un bon point de départ ; augmentez si les champs produit reviennent vides. Exécutez le script avec python scraper.py et vous devriez voir le vrai balisage produit, pas une coquille maigre. Cela confirme que le rendu fonctionne avant d'écrire un seul sélecteur.

Crawlbase Crawling API

Flipkart nécessite 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 les IP résidentielles côté serveur, et vous remet le HTML final, pour que vous évitiez de gérer une flotte sans interface et un pool de proxies. Testez-la sur une page produit publique avec le niveau gratuit.

Étape 2 : Analyser les champs produit avec BeautifulSoup

Le HTML rendu en main, chargez-le dans BeautifulSoup et extrayez chaque champ par son sélecteur. Une page produit Flipkart présente les détails essentiels dans une structure prévisible, vous pouvez donc associer le nom, le prix, la note, le nombre d'avis et la liste des points forts à des sélecteurs individuels. Des fonctions auxiliaires qui retournent None pour un élément manquant empêchent qu'une valeur absente ne fasse planter toute l'exécution.

python
from bs4 import BeautifulSoup
import re

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")

    price = text_of(soup, "div._30jeq3.x_zBx4")
    highlights = [
        li.get_text(strip=True)
        for li in soup.select("div._7eSDEz li._21Ahn-")
    ]

    return {
        "name": text_of(soup, "span.B_NuCI"),
        "price": re.sub(r"\D", "", price) if price else None,
        "rating": text_of(soup, "div._3LWZlK"),
        "review_count": text_of(soup, "span._2_R_DZ"),
        "highlights": highlights,
    }

L'auxiliaire text_of fait deux choses utiles à la fois : il interroge un seul élément et retourne None quand l'élément est manquant, au lieu de lancer une exception sur un appel .get_text() contre rien. Cela rend l'extraction résiliente quand un champ est absent sur une page donnée, ce qui est courant puisque tous les produits n'affichent pas une note ni un bloc de points forts complet. Le prix est passé dans une petite regex pour supprimer le symbole de devise et les virgules, laissant une chaîne entière propre que vous pouvez convertir en nombre par la suite.

Selectors drift

Les noms de classes Flipkart (les jetons hachés comme _30jeq3, B_NuCI et _3LWZlK) sont des artefacts de build et changent sans préavis. Traitez les sélecteurs ci-dessus comme un modèle de départ, non 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 à jour le sélecteur. La maintenance périodique des sélecteurs est normale pour tout scraper en production, pas le signe que quelque chose est cassé.

Étape 3 : Assembler le tout

Reliez maintenant la récupération et l'analyse en un seul script exécutable. Récupérez le HTML rendu, transmettez-le à l'analyseur et affichez l'enregistrement structuré.

python
import json
import re
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": 5000}
    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")
    price = text_of(soup, "div._30jeq3.x_zBx4")
    highlights = [
        li.get_text(strip=True)
        for li in soup.select("div._7eSDEz li._21Ahn-")
    ]
    return {
        "name": text_of(soup, "span.B_NuCI"),
        "price": re.sub(r"\D", "", price) if price else None,
        "rating": text_of(soup, "div._3LWZlK"),
        "review_count": text_of(soup, "span._2_R_DZ"),
        "highlights": highlights,
    }

def main():
    page_url = "https://www.flipkart.com/oneplus-bullets-wireless-z2-bluetooth-headset/p/itm4c3852314bb61"
    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

Exécutez le script complet avec python scraper.py et vous obtenez un enregistrement structuré propre pour le produit, prêt à écrire en JSON, CSV ou dans une base de données.

json
{
  "name": "OnePlus Bullets Wireless Z2 Bluetooth Headset",
  "price": "1799",
  "rating": "4.3",
  "review_count": "9,05,873 Ratings & 47,210 Reviews",
  "highlights": [
    "30 Hrs Battery Life",
    "Fast Charge: 10 min for 20 hours",
    "Bluetooth version: 5.0"
  ]
}

Mise à l'échelle sur de nombreux produits

Un produit est une démonstration ; un vrai travail s'exécute sur une liste de produits. La forme reste la même : conservez une liste d'URL de produits, récupérez chacune via la Crawling API, analysez-la avec la même fonction et collectez les lignes. Comme chaque page produit partage la même structure, l'analyseur que vous avez déjà écrit fonctionne sur tous sans modification.

python
import time

product_urls = [
    "https://www.flipkart.com/oneplus-bullets-wireless-z2-bluetooth-headset/p/itm4c3852314bb61",
    "https://www.flipkart.com/boat-airdopes-161-bluetooth-headset/p/itm8a7493150ae4a",
]

results = []
for url in product_urls:
    html = crawl(url)
    if html:
        results.append(scrape_product(html))
    time.sleep(2)

with open("products.json", "w") as f:
    json.dump(results, f, indent=2)

Pour construire la liste d'URL à grande échelle, scrapez les pages de recherche publiques de Flipkart avec le même schéma récupération-analyse, collectez les liens de produits, puis visitez chacun. Le time.sleep(2) entre les requêtes est une cadence délibérée : il vous évite de bombarder le site dans une boucle serrée, ce qui est le moyen le plus rapide d'être limité. Pour un guide e-commerce plus complet, voir le guide sur le scraping web e-commerce.

Rester non bloqué

Même avec le rendu géré, Flipkart surveille le trafic ressemblant à un scraper. Quelques habitudes maintiennent une exécution saine, et elles s'appliquent à toute cible commerciale difficile.

  • Pacez vos requêtes. Bombarder les pages dans une boucle serrée est le moyen le plus rapide d'être limité. Répartissez les requêtes et variez vos cibles plutôt que de crawler un seul chemin à pleine vitesse.
  • Misez sur la rotation. Un pool d'IP résidentielles répartit les requêtes sur de nombreuses adresses d'utilisateurs réels, de sorte qu'aucune ne déclenche une limite de débit. La Crawling API gère cela pour vous ; si vous construisez votre propre infrastructure, c'est la partie à bien faire.
  • Lisez les codes de statut. Une exécution qui commence à renvoyer des challenges ou des erreurs vous indique que le taux actuel ou le niveau d'IP n'est plus suffisant. Traitez-le comme un signal de reculer, pas comme du bruit à ignorer.

Pour le guide plus complet, voir comment scraper des sites web sans être bloqué et la plongée en profondeur sur comment crawler les sites web JavaScript. 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 (aussi appelé AI Proxy) vous offre la même rotation d'IP résidentielles comme endpoint proxy transparent.

Est-il légal de scraper Flipkart ?

La légalité du scraping de Flipkart dépend des conditions d'utilisation de Flipkart, de votre juridiction et de ce que vous faites des données. Les conditions de Flipkart restreignent l'accès automatisé, donc le scraping peut aller à l'encontre de ces conditions quelle que soit la prudence de vos outils. Aucun code ici ne change cela ; il ne fait que rendre la partie technique fonctionnelle. Lisez les Conditions d'utilisation de Flipkart et son robots.txt, et traitez les deux comme la frontière de ce que vous collectez.

Quelques lignes à respecter. Collectez uniquement des données produit publiques : le nom du produit, le prix, la note, le nombre d'avis et les points forts que tout le monde peut voir sans compte. Respectez les attentes de débit déclarées de Flipkart et gardez votre volume de requêtes assez bas pour ne pas surcharger ses serveurs. Évitez tout ce qui est lié à des individus identifiables, y compris les profils de rédacteurs d'avis ou les détails d'acheteurs au-delà des comptages agrégés affichés publiquement. 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 est un consentement.

Ce guide est délibérément limité aux pages de détail produit publiques parce que c'est la ligne qui rend le travail défendable. Il ne couvre rien derrière une connexion : votre compte ou historique de commandes, les tableaux de bord vendeurs, les pages protégées par une connexion, ou toute tentative de contourner l'authentification. Si votre projet nécessite plus que des données produit publiques, pour un usage en volume ou commercial, le chemin correct est une API Flipkart officielle ou un accord de données, pas un scraper plus ingénieux. Données produit publiques uniquement.

Récapitulatif

Points clés

  • Flipkart rend le détail produit côté client. Une simple requête retourne une page maigre, vous devez donc rendre avant d'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_wait et page_wait contrôlent la durée d'attente du contenu.
  • BeautifulSoup effectue l'extraction. Associez le nom, le prix, la note, le nombre d'avis et les points forts aux sélecteurs actuels, et anticipez la dérive de ces noms de classes hachés.
  • Mise à l'échelle par boucle sur les URL. Le même analyseur fonctionne sur chaque page produit, donc un vrai travail est juste une liste de liens avec une cadence sensée.
  • Restez sur des données publiques. Respectez les CGU et le robots.txt de Flipkart, préférez une API officielle ou un accord pour un usage en volume ou commercial, et ne touchez jamais aux comptes, commandes ou pages protégées par une connexion.

Foire aux questions

Pourquoi une simple requête ne retourne-t-elle aucune donnée produit depuis Flipkart ?

Parce que Flipkart construit une grande partie de son détail produit côté client avec JavaScript. Le HTML initial est maigre et ne se remplit qu'après l'exécution des scripts de la page dans un navigateur, donc une requête HTTP brute peut revenir avec le prix, la note ou les points forts manquants. Pour obtenir de vraies données, vous devez d'abord rendre la page, ce que le token JS de la Crawling API gère pour vous.

Ai-je besoin du token normal ou du token JS pour Flipkart ?

Utilisez le token JS. Le token normal récupère le HTML statique, qui sur Flipkart peut être une page plus mince où les champs produit clés sont absents. Le token JS rend la page dans un vrai navigateur avant de retourner le HTML, de sorte que le nom, le prix, la note et les points forts sont présents lorsque BeautifulSoup les analyse.

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

Presque certainement le balisage de Flipkart. Ses noms de classes sont des artefacts de build hachés comme _30jeq3 et B_NuCI, et ils changent sans préavis, donc des sélecteurs qui fonctionnaient le mois dernier peuvent se casser. Ré-inspectez une page produit 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.

Comment scraper de nombreux produits Flipkart à la fois ?

Conservez une liste d'URL de produits et bouclez dessus, en récupérant chacune via la Crawling API et en l'analysant avec la même fonction. Construisez cette liste d'URL en scrapant d'abord les pages de recherche publiques de Flipkart. Ajoutez un court délai entre les requêtes pour ne pas bombarder le site, et écrivez les lignes collectées en JSON ou CSV à la fin.

Dois-je utiliser une API Flipkart officielle ou scraper le site ?

Si vous avez besoin de données sous licence, d'un volume important, d'une structure garantie ou de droits de réutilisation commerciale, une API officielle ou un accord de données est le bon outil et vous maintient du bon côté des conditions de Flipkart. Scraper les pages produit publiques avec l'approche de ce guide convient à la recherche à plus petite échelle sur des 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.

Comment éviter d'être bloqué lors du scraping de Flipkart ?

Gardez votre taux de requêtes par IP bas, variez vos cibles plutôt que de boucler sur un seul chemin, et routez via des IP résidentielles rotatives pour qu'aucune 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 infrastructure, c'est la partie dans laquelle investir. Surveillez les codes de statut et reculez quand vous commencez à voir des challenges.

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