Farfetch ist einer der größten Luxusmode-Marktplätze und verbindet Käufer mit Boutiquen und High-End-Marken über Tausende von Kleidungs-, Schuh- und Accessoire-Listings. Die öffentlichen Produktseiten tragen die Art von Daten, die Modeanalysten, Preisverfolgern und E-Commerce-Teams interessieren: welche Marken gelistet sind, was die Artikel sind, wie sie bepreist sind und wo jeder einzelne verlinkt. Das Beobachten dieses Katalogs im Laufe der Zeit zeigt, wie Luxusgüter über Marken und Kategorien hinweg bepreist werden und welche Labels gerade im Trend liegen.

Diese Anleitung zeigt Ihnen, wie Sie Farfetch-Einzelhandelsdaten scrapen mit JavaScript und Node.js unter Verwendung von cheerio. Sie bauen einen kleinen, lauffähigen Scraper, der eine Farfetch-Listingseite über die Crawling API abruft, die Marke, den Produktnamen, den Preis und den Link für jeden Artikel parst, die Paginierung verwaltet und das Ergebnis als JSON und CSV exportiert. Die gesamte Anleitung bleibt auf öffentliche Produktlistingdaten beschränkt, und der Rechtsabschnitt am Ende ist kein Standardtext, also lesen Sie ihn, bevor Sie diesen Scraper auf echtes Volumen anwenden.

Was Sie bauen werden

Ein Node.js-Skript, das eine öffentliche Farfetch-Kategorie-URL entgegennimmt, das gerenderte HTML über die Crawling API abruft und für jede Produktkarte im Listing einen strukturierten Datensatz extrahiert. Wir verwenden eine Herrenschuhe-Kategorie als laufendes Beispiel und extrahieren folgende Felder pro Artikel:

  • Brand der auf der Karte angezeigte Luxusmarkenname, zum Beispiel "Gucci".
  • Description der kurze Produkttext, der den Artikel identifiziert, wie "Screener leather sneakers".
  • Price der auf der Karte angezeigte Preis, einschließlich des Währungssymbols.
  • Discount das Rabatt-Label, wenn der Artikel im Angebot ist, andernfalls "N/A".
  • Link die absolute URL zur einzelnen Produktseite auf farfetch.com.

Warum eine einfache Anfrage bei Farfetch fehlschlägt

Wenn Sie eine Farfetch-Kategorie-URL mit einem einfachen HTTP-Client anfordern, erhalten Sie selten das Produktraster zurück. Farfetch rendert seine Listenelemente im Browser mit JavaScript, so dass die initiale HTML-Seite eine nahezu leere Hülle ist, bis die Skripte der Seite ausgeführt werden. Zudem beobachtet Farfetch automatisierten Traffic: Datacenter-IPs und Anfragemuster, die nicht wie ein echter Browser aussehen, werden herausgefordert, ratenlimitiert oder blockiert, bevor sie die gerenderten Produktdaten erreichen.

Ein funktionierender Farfetch-Scraper benötigt daher 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 plus einem Pool rotierender Residential-Proxies aufbauen, aber deren Zusammenstellung und Wartung ist der Großteil der Arbeit. Die Crawling API vereint beides in einem einzigen Aufruf: Sie senden die URL, sie rendert die Seite hinter einer vertrauenswürdigen IP und gibt fertiges HTML zurück, das Sie mit cheerio parsen können.

Wait for the content

Da Farfetch sein Raster clientseitig lädt, weisen Sie die Crawling API an, darauf zu warten, dass das JavaScript abgeschlossen ist, bevor es das HTML erfasst. Setzen Sie ajax_wait: 'true' und ein page_wait von einigen tausend Millisekunden, damit die Produktkarten im zurückgegebenen Markup vorhanden sind. Das Rendering verwendet den JavaScript-Anfragetyp, weshalb diese Listings das JS-Token statt einer einfachen Anfrage benötigen.

Voraussetzungen

Sie benötigen einige Dinge, bevor Sie Code schreiben. Keines davon nimmt viel Zeit in Anspruch.

Grundlegende JavaScript- und Node.js-Kenntnisse. Sie sollten sich damit auskennen, ein Node-Skript zu schreiben und auszuführen sowie Pakete mit npm zu installieren. Wenn Sie neu bei Node sind, bringen Sie die offiziellen Docs und ein Einsteigerkurs auf das Niveau, das dieses Tutorial voraussetzt. Die Anleitung zum Bauen eines Web-Scrapers mit Node.js ist ein gutes Aufwärmtraining, wenn Sie eines möchten.

Node.js 16 oder höher. Bestätigen Sie Ihre Version mit node --version. Falls nicht vorhanden, installieren Sie es von der Node.js-Website oder über einen Versionsmanager wie nvm.

Ein Crawlbase-Konto und Token. Registrieren Sie sich, öffnen Sie Ihr Dashboard und kopieren Sie Ihr Token. Das kostenlose Kontingent gibt Ihnen bis zu 20.000 Anfragen ohne Kreditkarte. Farfetch benötigt Rendering, also verwenden Sie für diese Anfragen Ihr JavaScript-Token. Behandeln Sie das Token wie ein Passwort: Es authentifiziert Ihre Anfragen, also halten Sie es aus der Versionskontrolle heraus.

Projekt einrichten

Erstellen Sie einen Projektordner, initialisieren Sie ihn und installieren Sie die beiden Bibliotheken, die der Scraper benötigt.

bash
node --version

mkdir farfetch-scraper && cd farfetch-scraper
npm init -y

npm install crawlbase cheerio

Zwei Abhängigkeiten erledigen die Arbeit: crawlbase ist der offizielle Node-Client für die Crawling API, und cheerio parst das zurückgegebene HTML mit einer jQuery-ähnlichen API, sodass Sie einzelne Felder per CSS-Selektor extrahieren können. Erstellen Sie eine Datei namens farfetch-scraper.js in diesem Ordner und fügen Sie den Code aus den folgenden Schritten hinzu.

Schritt 1: Die gerenderte Listingseite abrufen

Beginnen Sie damit, die fertige Seite zu erhalten. Importieren Sie die CrawlingAPI-Klasse, initialisieren Sie sie mit Ihrem Token und fordern Sie die Kategorie-URL mit den gesetzten Wait-Optionen an, damit die Karten vor der Erfassung des HTML gerendert sind. Durch die Überprüfung des Statuscodes vor dem Parsen bleiben Fehler sichtbar statt still.

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

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

const options = {
  ajax_wait: 'true',    // wait for the JavaScript grid to load
  page_wait: '5000'     // give the page 5 seconds to settle
};

const listingURL =
  'https://www.farfetch.com/shopping/men/shoes-2/items.aspx';

api
  .get(listingURL, options)
  .then((response) => {
    if (response.statusCode === 200) {
      console.log(response.body.slice(0, 500));
    }
  })
  .catch((error) => console.error('API request error:', error));

Führen Sie das Skript mit node farfetch-scraper.js aus, und Sie sollten echtes Farfetch-Produkt-Markup am Anfang des Body sehen, keine abgespeckte Hülle. Das bestätigt, dass das Rendering funktioniert, bevor Sie einen einzigen Selektor schreiben. Die ajax_wait- und page_wait-Optionen sind es, die dem clientseitigen Raster Zeit zum Befüllen geben; Sie können mehr über die verfügbaren Anfrageparameter in der Crawling API-Dokumentation lesen.

Crawlbase Crawling API

Diese erste Anfrage hat gerade ein vollständig gerendertes Farfetch-Listing zurückgegeben, ohne einen Headless-Browser oder einen Proxy auf Ihrer Seite. Die Crawling API führt die Seite in einem echten Browser aus, wartet mit ajax_wait und page_wait darauf, dass das JavaScript-Raster geladen wird, rotiert serverseitig durch Residential-IPs und verarbeitet die Herausforderungen, die Farfetch Scrapern entgegenwirft, sodass Sie fertiges HTML aus einem Aufruf erhalten. Richten Sie es auf eine Herrenschuhe-Kategorie im kostenlosen Kontingent aus.

Schritt 2: Jede Produktkarte mit cheerio parsen

Mit fertigem HTML in der Hand laden Sie es in cheerio und gehen die Produktkarten durch. Farfetch legt jeden Artikel als Listenelement im Katalograster an, also wählen Sie jede Karte aus und lesen dann Marke, Beschreibung, Preis, Rabatt und Link aus ihr heraus. Das defensive Lesen jedes Feldes verhindert, dass ein fehlender Wert den Lauf abbricht.

javascript
const cheerio = require('cheerio');

function parseListings(html) {
  const $ = cheerio.load(html);
  const products = [];

  const cards = $(
    'ul#catalog-grid > li[data-testid="productCard"]'
  );

  cards.each((index, element) => {
    const card = $(element);

    const brand = card
      .find('p[data-component="ProductCardBrandName"]')
      .text()
      .trim() || 'N/A';

    const description = card
      .find('p[data-component="ProductCardDescription"]')
      .text()
      .trim() || 'N/A';

    const price = card
      .find('p[data-component="Price"], p[data-component="PriceFinal"]')
      .first()
      .text()
      .trim() || 'N/A';

    const discount = card
      .find('p[data-component="PriceDiscount"]')
      .text()
      .trim() || 'N/A';

    const href = card.find('a').first().attr('href');
    const link = href
      ? new URL(href, 'https://www.farfetch.com').href
      : 'N/A';

    products.push({ brand, description, price, discount, link });
  });

  return products;
}

Die Selektoren kommen direkt von der Seite. Jede Karte ist ein li[data-testid="productCard"] innerhalb von ul#catalog-grid. Die Marke sitzt in einem p-Element mit data-component="ProductCardBrandName", die Beschreibung in ProductCardDescription und der Preis in Price oder PriceFinal, sodass der Selektor beides abgleicht und das erste nimmt. Wenn ein Artikel im Angebot ist, befindet sich das Rabatt-Label in PriceDiscount. Der Produktlink ist der Anker-href der Karte, den Farfetch als relativen Pfad ausliefert, also wird er gegen https://www.farfetch.com aufgelöst, um eine absolute URL zu erhalten, die außerhalb der Seite funktioniert.

Selectors drift

Farfetchs data-component- und data-testid-Attribute sind stabile Handles, aber das Markup ändert sich im Laufe der Zeit. Behandeln Sie die obigen Selektoren als Startvorlage, nicht als Vertrag. Wenn ein Feld über das Board als "N/A" zurückkommt, überprüfen Sie die Live-Seite in den Entwicklerwerkzeugen Ihres Browsers und aktualisieren Sie den Selektor. Periodische Selektor-Wartung ist für jeden Produktions-Scraper normal, kein Zeichen, dass etwas kaputt ist.

Schritt 3: Paginierung verwalten

Farfetch verteilt seine Listings über viele Seiten. Um eine vollständige Kategorie zu sammeln, gehen Sie die Seiten durch, indem Sie einen page-Parameter an die URL anhängen, und führen Sie dasselbe Abruf-und-Parsen auf jeder aus, dann sammeln Sie alles in einer einzigen Liste.

javascript
async function crawl(pageUrl) {
  const response = await api.get(pageUrl, options);
  if (response.statusCode === 200) return response.body;
  console.error(`Request failed: ${response.statusCode}`);
  return null;
}

async function scrapeMultiplePages(baseUrl, totalPages) {
  const allProducts = [];

  for (let page = 1; page <= totalPages; page++) {
    const paginatedUrl = `${baseUrl}?page=${page}`;
    console.log(`Scraping page: ${page}`);
    const html = await crawl(paginatedUrl);
    if (!html) continue;
    allProducts.push(...parseListings(html));
  }

  return allProducts;
}

Das schleift von Seite 1 bis totalPages, baut jede Seiten-URL als ?page=N, ruft sie über die Crawling API mit denselben Wait-Optionen ab, parst die Karten und verteilt die Ergebnisse in ein kombiniertes Array. Da jede Kategorieseite dieselbe Kartenstruktur teilt, funktioniert die parseListings-Funktion, die Sie in Schritt 2 geschrieben haben, ohne Änderungen auf allen.

Schritt 4: Das vollständige Skript mit JSON- und CSV-Export zusammensetzen

Verbinden Sie jetzt den Abruf, das Parsen und die Paginierung in einem lauffähigen Skript und schreiben Sie die Datensätze als JSON und CSV auf die Festplatte.

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

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

const options = { ajax_wait: 'true', page_wait: '5000' };

async function crawl(pageUrl) {
  const response = await api.get(pageUrl, options);
  if (response.statusCode === 200) return response.body;
  console.error(`Request failed: ${response.statusCode}`);
  return null;
}

function parseListings(html) {
  const $ = cheerio.load(html);
  const products = [];

  $('ul#catalog-grid > li[data-testid="productCard"]').each((i, el) => {
    const card = $(el);
    const brand = card.find('p[data-component="ProductCardBrandName"]').text().trim() || 'N/A';
    const description = card.find('p[data-component="ProductCardDescription"]').text().trim() || 'N/A';
    const price = card.find('p[data-component="Price"], p[data-component="PriceFinal"]').first().text().trim() || 'N/A';
    const discount = card.find('p[data-component="PriceDiscount"]').text().trim() || 'N/A';
    const href = card.find('a').first().attr('href');
    const link = href ? new URL(href, 'https://www.farfetch.com').href : 'N/A';

    products.push({ brand, description, price, discount, link });
  });

  return products;
}

async function scrapeMultiplePages(baseUrl, totalPages) {
  const allProducts = [];
  for (let page = 1; page <= totalPages; page++) {
    console.log(`Scraping page: ${page}`);
    const html = await crawl(`${baseUrl}?page=${page}`);
    if (html) allProducts.push(...parseListings(html));
  }
  return allProducts;
}

function toCsv(rows) {
  const headers = ['brand', 'description', 'price', 'discount', 'link'];
  const escape = (value) => `"${String(value).replace(/"/g, '""')}"`;
  const lines = [headers.join(',')];
  for (const row of rows) {
    lines.push(headers.map((h) => escape(row[h])).join(','));
  }
  return lines.join('\n');
}

async function main() {
  const baseUrl = 'https://www.farfetch.com/shopping/men/shoes-2/items.aspx';
  const products = await scrapeMultiplePages(baseUrl, 5);
  if (!products.length) return;

  fs.writeFileSync('farfetch_listings.json', JSON.stringify(products, null, 2));
  fs.writeFileSync('farfetch_listings.csv', toCsv(products));
  console.log(`Saved ${products.length} products to JSON and CSV`);
}

main();

Führen Sie es mit node farfetch-scraper.js aus, und Sie erhalten zwei Dateien: farfetch_listings.json mit den vollständigen strukturierten Datensätzen und farfetch_listings.csv, die direkt in einer Tabellenkalkulation geöffnet werden kann. Der toCsv-Helfer setzt jedes Feld in Anführungszeichen und verdoppelt eingebettete Anführungszeichen, was hier wichtig ist, weil Markennamen und Produktbeschreibungen häufig Kommas enthalten.

Wie die Ausgabe aussieht

Die JSON-Datei enthält ein Objekt pro Produktkarte, jeweils mit Marke, Beschreibung, Preis, Rabatt und Link.

json
[
  {
    "brand": "Gucci",
    "description": "Screener leather sneakers",
    "price": "$890",
    "discount": "N/A",
    "link": "https://www.farfetch.com/shopping/men/gucci-screener-sneakers-item-27582236.aspx"
  },
  {
    "brand": "Common Projects",
    "description": "Original Achilles low-top sneakers",
    "price": "$425",
    "discount": "30% off",
    "link": "https://www.farfetch.com/shopping/men/common-projects-original-achilles-item-12345678.aspx"
  }
]

Die CSV spiegelt dieselben Zeilen mit einer Kopfzeile wider, sodass sie direkt in Excel, Google Sheets oder jede Datenpipeline geladen werden kann, die Trennzeichen-Dateien liest.

csv
brand,description,price,discount,link
"Gucci","Screener leather sneakers","$890","N/A","https://www.farfetch.com/shopping/men/gucci-screener-sneakers-item-27582236.aspx"
"Common Projects","Original Achilles low-top sneakers","$425","30% off","https://www.farfetch.com/shopping/men/common-projects-original-achilles-item-12345678.aspx"

Über Kategorien skalieren

Eine Kategorie ist eine Demo; ein echter Job durchläuft mehrere Farfetch-Abteilungen. Jede Kategorie liegt unter ihrem eigenen Listing-Pfad, zum Beispiel Herrenschuhe, Damentaschen oder Kinderkleidung, also können Sie eine Liste von Kategorie-URLs erstellen, scrapeMultiplePages auf jeder ausführen und jede Zeile vor dem Export mit ihrer Kategorie versehen. Da jede Listingseite dieselbe Kartenstruktur teilt, funktioniert der Parser, den Sie bereits geschrieben haben, ohne Änderungen auf allen.

Dieses Muster geht direkt in Preis- und Produktforschung über. Für das umfassendere Bild des Extrahierens strukturierter Daten aus Online-Shops lesen Sie die Anleitung zu E-Commerce-Web-Scraping, und um diese Preise in Entscheidungen umzuwandeln, lesen Sie, wie man Web-Scraping für Preis-Intelligence nutzt. Wenn Sie denselben Ansatz auf einen anderen Mode-Einzelhändler anwenden möchten, deckt die Anleitung zum Erstellen eines Zalando-Scrapers einen ähnlich JavaScript-lastigen Katalog ab.

Unblockiert bleiben

Selbst wenn das Rendering verwaltet wird, überwacht Farfetch Traffic, der nach Scrapern aussieht. Ein paar Gewohnheiten halten einen Lauf gesund, und sie gelten für jedes schwer zu scrapende kommerzielle Ziel.

  • Drosseln Sie Ihre Anfragen. Führen Sie eine Verzögerung zwischen dem Abruf von Seiten ein, anstatt den Katalog in einer engen Schleife zu bombardieren. Das Verteilen von Anfragen ist der wichtigste Faktor, um unter den Ratenlimits einer Website zu bleiben.
  • Setzen Sie auf Rotation. Ein Pool von Residential-IPs verteilt Anfragen auf viele echte Nutzeradressen, sodass keine einzelne ein Limit oder eine Herausforderung auslöst. Die Crawling API übernimmt das für Sie; wenn Sie Ihren eigenen Stack aufbauen, ist das der Teil, den Sie richtig hinbekommen müssen.
  • Lesen Sie die Statuscodes. Ein Lauf, der beginnt, Herausforderungen oder Nicht-200-Antworten zurückzugeben, signalisiert Ihnen, dass die aktuelle Rate oder IP-Ebene nicht mehr ausreicht. Behandeln Sie das als Signal zum Zurückschalten, nicht als Rauschen, das ignoriert werden soll.

Für das umfassendere Playbook dazu lesen Sie, wie man Websites ohne Blockierung scrapt, und für die Mechanik, warum diese Kataloge überhaupt einen echten Browser benötigen, geht die Anleitung zum Crawlen von JavaScript-Websites tiefer.

Ob das Scrapen von Farfetch erlaubt ist, hängt von Farfetchs Nutzungsbedingungen, Ihrer Gerichtsbarkeit und dem ab, was Sie mit den Daten tun. Farfetchs Bedingungen schränken automatisierten Zugang ein, sodass Scraping gegen diese Bedingungen verstoßen kann, unabhängig davon, wie sorgfältig Ihre Werkzeuge sind. Keiner der hier gezeigten Codes ändert das; er bringt nur den technischen Teil zum Laufen. Lesen Sie Farfetchs Nutzungsbedingungen und seine robots.txt und behandeln Sie beides als Grenze für das, was Sie sammeln.

Einige Grundsätze, die es wert sind, sie einzuhalten. Sammeln Sie nur öffentliche Produktdaten: die Marke, Beschreibung, Preis, Rabatt und Produktlink, den jeder auf einer Kategorieseite ohne Konto sehen kann. Respektieren Sie Farfetchs angegebene Ratenerwartungen und halten Sie Ihr Anfragevolumen niedrig genug, damit Sie die Server nicht belasten. Vermeiden Sie persönliche Daten, einschließlich alles, was mit identifizierbaren Rezensenten verbunden ist, über den öffentlichen Text auf der Seite hinaus. Verbreiten Sie keine urheberrechtlich geschützten Medien von Farfetch, wie Produktfotografie, als wären sie Ihre eigenen. Wenn Sie die Daten kommerziell wiederverwenden möchten, holen Sie die Genehmigung oder ein offizielles Abkommen ein, anstatt Schweigen als Zustimmung zu interpretieren.

Für Volumen oder kommerzielle Nutzung ist der richtige Schritt, nach einem sanktionierten Kanal zu suchen. Farfetch betreibt Partner- und Affiliate-Programme über seine Boutique- und Markenbeziehungen, und diese sind der richtige Weg, wenn Sie große Mengen, garantierte Struktur oder kommerzielle Rechte benötigen. Diese Anleitung beschränkt sich absichtlich auf öffentliche Listingdaten, weil das die Grenze ist, die die Arbeit vertretbar hält. Sie deckt nichts hinter einem Login ab, keine Kunden- oder Boutique-Personendaten, keine Bestellhistorie und keinen Versuch, eine Authentifizierung oder eine Herausforderung zu umgehen, die Sie nicht passieren sollten. Wenn Ihr Projekt mehr als öffentliche Listings erfordert, ist eine offizielle Partnerschaft oder ein Datenabkommen der richtige Weg, kein ausgefeilterer Scraper.

Zusammenfassung

Wichtigste Erkenntnisse

  • Farfetch rendert Listings clientseitig und blockiert stark. Eine einfache Anfrage gibt eine leere Hülle zurück, also müssen Sie die Seite hinter einer vertrauenswürdigen IP rendern, mit ajax_wait und page_wait gesetzt, bevor Sie sie parsen.
  • Die Crawling API erledigt die Schwerstarbeit in einem Aufruf. Sie rendert die Seite, wartet auf das JavaScript-Raster, rotiert Residential-IPs und verarbeitet Herausforderungen und gibt fertiges HTML zurück, das Sie mit cheerio parsen.
  • cheerio extrahiert die Felder. Wählen Sie jedes li[data-testid="productCard"], dann lesen Sie Marke, Beschreibung, Preis, Rabatt und den absoluten Produktlink aus jeder Karte heraus.
  • Paginieren und exportieren. Gehen Sie Seiten mit ?page=N durch, sammeln Sie die Datensätze und schreiben Sie sie in JSON und CSV, wobei CSV-Felder in Anführungszeichen gesetzt werden, damit kommahaltige Markennamen und Beschreibungen intakt bleiben.
  • Bleiben Sie bei öffentlichen Daten. Respektieren Sie Farfetchs Bedingungen und robots.txt, drosseln Sie Ihre Anfragen und bevorzugen Sie eine offizielle Partnerschaft oder einen Affiliate-Kanal für Volumen oder kommerzielle Nutzung.

Häufig gestellte Fragen

Wie verwalte ich JavaScript-Inhalte beim Scrapen von Farfetch?

Farfetch lädt sein Produktraster clientseitig, daher ist das rohe HTML nahezu leer, bis die Skripte der Seite ausgeführt werden. Leiten Sie die Anfrage über die Crawling API mit ajax_wait: 'true' und einem page_wait von einigen tausend Millisekunden weiter, was dem JavaScript Zeit zum Rendern gibt, bevor das HTML erfasst wird. Verwenden Sie für diese Anfragen Ihr JavaScript-Token, da Rendering ein JS-Anfragetyp ist.

Kann ich Produktdetails von mehreren Seiten auf Farfetch scrapen?

Ja. Farfetch paginiert seine Kategorien, also hängen Sie einen page-Parameter an die Listing-URL an, zum Beispiel ?page=2, und schleifen Sie durch die gewünschten Seiten. Führen Sie dasselbe Abruf-und-Parsen auf jeder Seite aus und kombinieren Sie die Ergebnisse in einem Array, wie die scrapeMultiplePages-Funktion in dieser Anleitung es tut. Das Weiterleiten jeder Seite über die Crawling API hält die Rotation und Herausforderungsverarbeitung über den Lauf konsistent.

Welche Felder extrahiert dieser Scraper?

Für jede Produktkarte extrahiert er die Marke aus ProductCardBrandName, die Beschreibung aus ProductCardDescription, den Preis aus Price oder PriceFinal, das Rabatt-Label aus PriceDiscount und den Produktlink aus dem Anker der Karte, aufgelöst zu einer absoluten farfetch.com-URL. Fehlende Werte fallen auf "N/A" zurück, sodass eine teilweise Karte niemals den Lauf unterbricht.

Meine Selektoren geben für jede Karte "N/A" zurück. Was hat sich geändert?

Höchstwahrscheinlich Farfetchs Markup. Seine data-component- und data-testid-Handles sind ziemlich stabil, können sich aber ändern, und ein Layout-Update kann ein Feld verschieben. Überprüfen Sie eine Live-Kategorieseite in den Entwicklerwerkzeugen Ihres Browsers und aktualisieren Sie die Selektoren entsprechend. Periodische Selektor-Wartung ist für jeden Produktions-Scraper normal.

Wie speichere ich die gescrapten Daten?

Speichern Sie sie in einem strukturierten Format wie JSON oder CSV. Diese Anleitung schreibt beides: farfetch_listings.json für nachgelagerten Code und farfetch_listings.csv für Tabellenkalkulationen und BI-Tools. Der CSV-Writer setzt jedes Feld in Anführungszeichen und maskiert eingebettete Anführungszeichen, damit Kommas in Markennamen oder Beschreibungen die Spalten nicht verschieben.

Kann ich Persönlichkeitsdaten von Farfetch scrapen?

Nein, und diese Anleitung deckt das nicht ab. Kundenkontodaten, Bestellhistorie und alles hinter einem Login sind keine öffentlichen Daten. Das Scrapen von durch Login gesperrten Inhalten, Personendaten zu Rezensenten über den öffentlichen Text auf der Seite hinaus oder das Umgehen von Authentifizierung liegt außerhalb des Geltungsbereichs hier und verstößt gegen Farfetchs Bedingungen. Für sanktionierten Zugang ist der richtige Weg eine offizielle Partnerschaft oder ein Datenabkommen.

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