Flipkart ist eine der größten E-Commerce-Plattformen Indiens, und jede Produktseite trägt die Art von strukturierten Details, die Preisverfolgung, Wettbewerbsbeobachtung und Katalogrecherche antreiben: ein Produktname, der aktuelle Preis, eine Sternebewertung, eine Rezensionsanzahl und ein Block aus Spezifikationen und Highlights. Das Problem ist, dass Flipkart diese Seiten im Browser rendert und sie gegen automatisierten Traffic absichert, sodass eine einfache HTTP-Anfrage eine fast leere Hülle liefert statt der gesuchten Felder.

Diese Anleitung zeigt, wie man Flipkart-Produktseiten mit Python zuverlässig scraped. Sie erstellen einen kleinen, lauffähigen Scraper, der eine gerenderte Produktseite über die Crawling API abruft, die gewünschten Felder mit BeautifulSoup parst und einen sauberen strukturierten Datensatz ausgibt. Die gesamte Anleitung beschränkt sich auf öffentliche Produktdaten, und der Legalitätsabschnitt gegen Ende ist kein Standardtext, also lesen Sie ihn, bevor Sie das auf beliebiges Volumen anwenden.

Was Sie bauen werden

Ein Python-Skript, das eine öffentliche Flipkart-Produkt-URL entgegennimmt, das gerenderte HTML über die Crawling API abruft und einen strukturierten Datensatz des Produkts extrahiert. Als durchgehendes Beispiel verwenden wir eine einzelne Produktseite und lesen folgende Felder aus:

  • Name der Produkttitel, zum Beispiel ein Kopfhörermodell mit seiner wichtigsten Spezifikationszeile.
  • Price der aktuelle, auf der Seite angezeigte Verkaufspreis.
  • Rating die durchschnittliche Sternebewertung, zum Beispiel "4.3".
  • Review count wie viele Bewertungen oder Rezensionen das Produkt hat.
  • Highlights die Aufzählungsliste der wichtigsten Spezifikationen, die Flipkart oben auf der Seite anzeigt.

Warum ein einfacher Abruf auf Flipkart scheitert

Wenn Sie eine Flipkart-Produkt-URL mit einem einfachen HTTP-Client anfragen, erhalten Sie eine Antwort, bei der die meisten Daten fehlen, die Sie im Browser sehen können. Zwei Dinge wirken gegen Sie. Erstens baut Flipkart einen Großteil seines Produktinhalts clientseitig mit JavaScript auf, sodass das anfängliche HTML dünn ist und erst nach dem Ausführen der Seitenskripte befüllt wird. Zweitens erkennt Flipkart automatisierten Traffic schnell: Datacenter-IPs und Anfragemuster, die nicht wie ein echter Browser aussehen, werden herausgefordert oder erhalten eine abgespeckte Seite, bevor sie jemals die vollständige Produktdetailseite erreichen.

Ein funktionsfähiger Flipkart-Scraper braucht also zwei Dinge in einer Anfrage: einen Browser, der die Seite tatsächlich rendert, und eine IP, die die Plattform als echten Besucher liest. Sie können das selbst mit einem Headless-Browser und einem Pool aus rotierenden Residential-Proxys zusammenstellen, aber diese zu verknüpfen und in Schuss zu halten, ist der größte Teil der Arbeit. Die Crawling API bündelt beides in einem einzigen Aufruf: Sie übergeben ihr die URL mit einem JavaScript-Token, sie rendert die Seite hinter einer vertrauenswürdigen IP und liefert fertiges HTML zum Parsen zurück.

Why the JS token

Crawlbase bietet zwei Token-Typen an. Der normale Token ruft statisches HTML ab; der JavaScript-Token (JS) rendert die Seite zuerst in einem echten Browser. Flipkart setzt bei Produktdetails auf clientseitiges Rendering, also ist der JS-Token hier die sichere Standardwahl. Der normale Token kann eine dünnere Seite zurückgeben, bei der Preis, Bewertung oder Highlights fehlen, und da gibt es dann nichts zu parsen.

Voraussetzungen

Vor dem Schreiben von Code müssen einige Dinge vorhanden sein. Keines davon nimmt viel Zeit in Anspruch.

Grundlegendes Python. Sie sollten in der Lage sein, ein Python-Skript zu schreiben und auszuführen sowie Pakete mit pip zu installieren. Wer neu in der Sprache ist: Die offizielle Python-Dokumentation und ein Einführungskurs bringen Sie auf das Niveau, das dieses Tutorial voraussetzt.

Python 3.8 oder höher. Bestätigen Sie Ihre Version mit python --version. Falls Python nicht installiert ist, holen Sie es von python.org oder über eine Distribution wie Anaconda.

Ein Crawlbase-Konto und JS-Token. Registrieren Sie sich, öffnen Sie Ihr Dashboard und kopieren Sie Ihren JavaScript-Token (JS). Behandeln Sie den Token wie ein Passwort: Er authentifiziert Ihre Anfragen, also bewahren Sie ihn aus der Versionskontrolle heraus.

Projekt einrichten

Erstellen Sie eine virtuelle Umgebung, damit die Projektabhängigkeiten isoliert bleiben, und installieren Sie dann die zwei Bibliotheken, die der Scraper benötigt.

bash
python --version

python -m venv flipkart_env
source flipkart_env/bin/activate

pip install crawlbase beautifulsoup4

Unter Windows aktivieren Sie die Umgebung mit flipkart_env\Scripts\activate statt der source-Zeile. Zwei Abhängigkeiten erledigen die Arbeit: crawlbase ist der offizielle Client für die Crawling API, und beautifulsoup4 parst das zurückgegebene HTML, damit Sie einzelne Felder per CSS-Selektor auslesen können. Wenn BeautifulSoup neu für Sie ist, deckt der BeautifulSoup-Leitfaden die Grundlagen ab, auf denen dieses Tutorial aufbaut.

Schritt 1: Die gerenderte Produktseite abrufen

Beginnen Sie damit, die fertige Seite zu erhalten. Importieren Sie die CrawlingAPI-Klasse, initialisieren Sie sie mit Ihrem JS-Token und fordern Sie die Produkt-URL an. Die Statusprüfung vor dem Parsen lässt Fehler laut statt still auftreten.

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

Die beiden Wait-Optionen sind wichtig für ein clientseitig gerendertes Ziel wie dieses. ajax_wait weist die API an, auf das Fertigstellen des Ladens asynchroner Inhalte zu warten, und page_wait hält für eine feste Anzahl Millisekunden nach dem Laden an, damit spät rendernde Elemente erscheinen, bevor die Seite aufgenommen wird. Fünf Sekunden sind ein vernünftiger Ausgangspunkt; erhöhen Sie den Wert, wenn Produktfelder leer zurückkommen. Führen Sie das Skript mit python scraper.py aus und Sie sollten echtes Produkt-Markup sehen, keine dünne Hülle. Das bestätigt, dass das Rendering funktioniert, bevor Sie einen einzigen Selektor schreiben.

Crawlbase Crawling API

Flipkart benötigt eine gerenderte Seite hinter einer vertrauenswürdigen IP, in einem Aufruf. Die Crawling API nimmt einen JS-Token, führt die Seite in einem echten Browser aus, rotiert serverseitig durch Residential-IPs und liefert fertiges HTML, damit Sie selbst keine Headless-Flotte und keinen Proxy-Pool betreiben müssen. Testen Sie es auf einer öffentlichen Produktseite im kostenlosen Kontingent.

Schritt 2: Produktfelder mit BeautifulSoup parsen

Mit gerendertem HTML laden Sie es in BeautifulSoup und lesen jedes Feld per Selektor aus. Eine Flipkart-Produktseite legt die Kerninformationen in einer vorhersagbaren Struktur dar, sodass Sie Name, Preis, Bewertung, Rezensionsanzahl und die Highlights-Liste einzelnen Selektoren zuordnen können. Helfer-Funktionen, die bei einem fehlenden Feld None zurückgeben, verhindern, dass ein fehlender Wert den gesamten Lauf zum Absturz bringt.

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,
    }

Der text_of-Helfer erledigt zwei nützliche Dinge auf einmal: Er fragt ein einzelnes Element ab und gibt None zurück, wenn das Element fehlt, anstatt bei einem .get_text()-Aufruf auf nichts zu werfen. Das macht die Extraktion robust, wenn ein Feld auf einer bestimmten Seite fehlt, was häufig vorkommt, da nicht jedes Produkt eine Bewertung oder einen vollständigen Highlights-Block listet. Der Preis wird durch einen kleinen Regex geleitet, um das Währungssymbol und Kommas zu entfernen, und hinterlässt eine saubere Ganzzahl-Zeichenkette, die Sie später in eine Zahl umwandeln können.

Selectors drift

Flipkarts Klassennamen (die gehashten Token wie _30jeq3, B_NuCI und _3LWZlK) sind Build-Artefakte und ändern sich ohne Vorankündigung. Betrachten Sie die obigen Selektoren als Ausgangspunkt, nicht als Vertrag. Wenn ein Feld als None zurückkommt, inspizieren Sie die Live-Seite in den Entwicklertools Ihres Browsers und aktualisieren Sie den Selektor. Regelmäßige Selektor-Wartung ist bei jedem Produktions-Scraper normal, kein Zeichen, dass etwas kaputt ist.

Schritt 3: Alles zusammenfügen

Verbinden Sie jetzt Abruf und Parse zu einem lauffähigen Skript. Rufen Sie das gerenderte HTML ab, übergeben Sie es an den Parser und geben Sie den strukturierten Datensatz aus.

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

Wie die Ausgabe aussieht

Führen Sie das vollständige Skript mit python scraper.py aus und Sie erhalten einen sauberen strukturierten Datensatz für das Produkt, bereit zum Schreiben in JSON, CSV oder eine Datenbank.

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"
  ]
}

Skalierung auf viele Produkte

Ein Produkt ist eine Demo; ein echter Auftrag läuft über eine Liste von Produkten. Die Form bleibt dieselbe: Führen Sie eine Liste von Produkt-URLs, rufen Sie jede über die Crawling API ab, parsen Sie sie mit derselben Funktion und sammeln Sie die Zeilen. Da jede Produktseite dieselbe Struktur teilt, funktioniert der bereits geschriebene Parser für alle ohne Änderungen.

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)

Um die URL-Liste in großem Maßstab aufzubauen, scrapen Sie Flipkarts öffentliche Suchseiten mit demselben Abruf-und-Parse-Muster, sammeln die Produkt-Links und besuchen dann jeden einzeln. Das time.sleep(2) zwischen Anfragen ist bewusstes Dosieren: Es verhindert, dass die Seite in einem engen Loop überlastet wird, was der schnellste Weg zur Drosselung ist. Für ein umfassenderes E-Commerce-Playbook lesen Sie den Leitfaden zum E-Commerce-Web-Scraping.

Geblockt bleiben verhindern

Auch wenn das Rendering gehandhabt wird, beobachtet Flipkart scrapertypischen Traffic. Einige Gewohnheiten halten einen Lauf gesund, und sie gelten für jedes schwierige kommerzielle Ziel.

  • Dosieren Sie Ihre Anfragen. Seiten in einem engen Loop zu hämmern, ist der schnellste Weg zur Drosselung. Verteilen Sie Anfragen und variieren Sie Ihre Ziele statt einen Pfad mit voller Geschwindigkeit zu crawlen.
  • Setzen Sie auf Rotation. Ein Pool aus Residential-IPs verteilt Anfragen über viele echte Nutzer-Adressen, sodass keine einzelne ein Rate-Limit auslöst. Die Crawling API erledigt das für Sie; wenn Sie Ihren eigenen Stack aufbauen, ist das der Teil, den Sie richtig machen müssen.
  • Lesen Sie die Statuscodes. Ein Lauf, der Herausforderungen oder Fehler zurückzugeben beginnt, zeigt Ihnen, dass die aktuelle Rate oder IP-Stufe nicht mehr ausreicht. Behandeln Sie das als Signal zum Zurückrudern, nicht als Rauschen zum Ignorieren.

Das umfassende Playbook finden Sie unter Wie man Websites scraped, ohne geblockt zu werden, und für eine tiefere Einführung lesen Sie Wie man JavaScript-Websites crawlt. Wenn Sie Ihren eigenen Traffic lieber über einen rotierenden Pool leiten statt die verwaltete API zu nutzen, bietet der Smart AI Proxy (auch AI Proxy genannt) dieselbe Residential-IP-Rotation als Drop-in-Proxy-Endpunkt.

Ob das Scrapen von Flipkart erlaubt ist, hängt von Flipkarts Nutzungsbedingungen, Ihrer Jurisdiktion und dem Verwendungszweck der Daten ab. Flipkarts Bedingungen schränken den automatisierten Zugriff ein, sodass Scraping unabhängig von der Sorgfalt Ihrer Werkzeuge gegen diese Bedingungen verstoßen kann. Keiner der hier gezeigten Code ändert das; er lässt lediglich den technischen Teil funktionieren. Lesen Sie Flipkarts Nutzungsbedingungen und die robots.txt und behandeln Sie beides als Grenze dessen, was Sie sammeln.

Einige Linien, an denen man festhalten sollte. Sammeln Sie nur öffentliche Produktdaten: Produktname, Preis, Bewertung, Rezensionsanzahl und die Highlights, die jeder ohne Account sehen kann. Respektieren Sie Flipkarts angegebene Rate-Erwartungen und halten Sie Ihr Anfragevolumen niedrig genug, damit Sie seine Server nicht belasten. Vermeiden Sie alles, was mit identifizierbaren Personen verbunden ist, einschließlich Rezensenten-Profile oder Käuferdetails jenseits der öffentlich angezeigten aggregierten Anzahlen. Wenn Sie die Daten kommerziell wiederverwenden planen, holen Sie eine Genehmigung oder eine offizielle Vereinbarung ein, anstatt anzunehmen, Schweigen sei Zustimmung.

Diese Anleitung ist bewusst auf öffentliche Produktdetailseiten beschränkt, weil das die Grenze ist, die die Arbeit vertretbar macht. Sie deckt nichts hinter einem Login ab: Ihr Konto oder Bestellverlauf, Verkäufer-Dashboards, login-gesperrte Seiten oder Versuche, die Authentifizierung zu umgehen. Wenn Ihr Projekt mehr als öffentliche Produktdaten erfordert, ist für Bulk- oder kommerziellen Einsatz der richtige Weg eine offizielle Flipkart-API oder eine Datenvereinbarung, kein ausgefeilterer Scraper. Nur öffentliche Produktdaten.

Zusammenfassung

Wichtigste Erkenntnisse

  • Flipkart rendert Produktdetails clientseitig. Ein einfacher Abruf liefert eine dünne Seite, also müssen Sie rendern, bevor Sie parsen.
  • Sie brauchen Rendering und eine vertrauenswürdige IP gemeinsam. Die Crawling API mit einem JS-Token erledigt beides in einem Aufruf; ajax_wait und page_wait steuern, wie lange sie auf Inhalte wartet.
  • BeautifulSoup übernimmt die Extraktion. Ordnen Sie Name, Preis, Bewertung, Rezensionsanzahl und Highlights den aktuellen Selektoren zu, und erwarten Sie, dass diese gehashten Klassennamen abweichen.
  • Skalierung durch URL-Schleife. Derselbe Parser funktioniert für jede Produktseite, also ist ein echter Auftrag nur eine Liste von Links plus vernünftiges Dosieren.
  • Bleiben Sie bei öffentlichen Daten. Respektieren Sie Flipkarts Nutzungsbedingungen und robots.txt, bevorzugen Sie für Bulk- oder kommerziellen Einsatz eine offizielle API oder Vereinbarung und berühren Sie niemals Konten, Bestellungen oder login-gesperrte Seiten.

Häufig gestellte Fragen

Warum gibt ein einfacher Abruf keine Produktdaten von Flipkart zurück?

Weil Flipkart einen Großteil seiner Produktdetails clientseitig mit JavaScript aufbaut. Das anfängliche HTML ist dünn und füllt sich erst nach dem Ausführen der Seitenskripte in einem Browser, sodass eine rohe HTTP-Anfrage mit fehlendem Preis, fehlender Bewertung oder fehlenden Highlights zurückkommen kann. Um echte Daten zu erhalten, müssen Sie die Seite zuerst rendern, was der JS-Token der Crawling API für Sie erledigt.

Brauche ich den normalen Token oder den JS-Token für Flipkart?

Verwenden Sie den JS-Token. Der normale Token ruft statisches HTML ab, was bei Flipkart eine dünnere Seite sein kann, bei der wichtige Produktfelder fehlen. Der JS-Token rendert die Seite in einem echten Browser, bevor er das HTML zurückgibt, sodass Name, Preis, Bewertung und Highlights vorhanden sind, wenn BeautifulSoup sie parst.

Meine Selektoren geben None zurück. Was hat sich geändert?

Mit ziemlicher Sicherheit Flipkarts Markup. Seine Klassennamen sind gehashte Build-Artefakte wie _30jeq3 und B_NuCI, und sie ändern sich ohne Vorankündigung, sodass Selektoren, die letzten Monat funktionierten, jetzt brechen können. Inspizieren Sie eine Live-Produktseite in den Entwicklertools Ihres Browsers und aktualisieren Sie die Selektoren. Regelmäßige Selektor-Wartung ist bei jedem Produktions-Scraper normal.

Wie scraped man viele Flipkart-Produkte auf einmal?

Führen Sie eine Liste von Produkt-URLs und iterieren Sie darüber, indem Sie jede über die Crawling API abrufen und mit derselben Funktion parsen. Erstellen Sie diese URL-Liste, indem Sie zuerst Flipkarts öffentliche Suchseiten scrapen. Fügen Sie eine kurze Verzögerung zwischen Anfragen ein, damit Sie die Seite nicht überlasten, und schreiben Sie die gesammelten Zeilen am Ende in JSON oder CSV.

Sollte ich eine offizielle Flipkart-API nutzen oder die Seite scrapen?

Wenn Sie lizenzierte Daten, großes Volumen, garantierte Struktur oder kommerzielle Wiederverwendungsrechte benötigen, ist eine offizielle API oder Datenvereinbarung das richtige Werkzeug und hält Sie auf der richtigen Seite von Flipkarts Bedingungen. Das Scrapen öffentlicher Produktseiten mit dem Ansatz in dieser Anleitung passt für kleinere, auf öffentlichen Daten basierende Recherchen, bei denen kein API-Zugang besteht, solange Sie die Nutzungsbedingungen, robots.txt und Rate-Limits respektieren.

Wie vermeide ich, beim Scrapen von Flipkart geblockt zu werden?

Halten Sie Ihre pro-IP-Anfragefrequenz niedrig, variieren Sie Ihre Ziele statt einen Pfad zu loopen, und leiten Sie durch rotierende Residential-IPs, damit keine einzelne Adresse ein Rate-Limit auslöst. Die Crawling API verwaltet Rotation und einen vertrauenswürdigen IP-Pool für Sie; wenn Sie Ihren eigenen Stack aufbauen, ist das der Teil, in den Sie investieren müssen. Beobachten Sie die Statuscodes und treten Sie einen Schritt zurück, wenn Herausforderungen auftreten.

Jetzt loslegen

Crawlen Sie jede Website im großen Maßstab, ohne gegen die Infrastruktur zu kämpfen.

Crawlbase übernimmt Proxys, Fingerprints und CAPTCHAs, damit Ihr Team Datenpipelines ausliefert, statt Crawl-Infrastruktur zu pflegen. 1.000 Anfragen kostenlos, keine Karte erforderlich.

Self-Service · Kein Verkaufsgespräch erforderlich · Enterprise-Crawl-Volumen verfügbar