Zurück zum Blog
Leitfäden
Raluca Penciuc23. Februar 20239 Minuten Lesezeit

Der ultimative Leitfaden für Web Scraping Walmart

Der ultimative Leitfaden für Web Scraping Walmart

Voraussetzungen

Bevor wir beginnen, sollten wir uns vergewissern, dass wir über die notwendigen Instrumente verfügen.

Laden Sie zunächst Node.js von der offiziellen Website herunter und installieren Sie es. Stellen Sie sicher, dass Sie die Long-Term Support (LTS) Version verwenden. Dadurch wird auch automatisch der Node Package Manager (NPM) installiert, den wir für die Installation weiterer Abhängigkeiten verwenden werden.

Für dieses Tutorial werden wir Visual Studio Code als integrierte Entwicklungsumgebung (IDE) verwenden, aber Sie können auch eine andere IDE Ihrer Wahl verwenden. Erstellen Sie einen neuen Ordner für Ihr Projekt, öffnen Sie das Terminal und führen Sie den folgenden Befehl aus, um ein neues Node.js-Projekt einzurichten:

npm init -y

Dadurch wird eine package.json-Datei in Ihrem Projektverzeichnis erstellt, in der Informationen über Ihr Projekt und seine Abhängigkeiten gespeichert werden.

Als nächstes müssen wir TypeScript und die Typdefinitionen für Node.js installieren. TypeScript bietet eine optionale statische Typisierung, die hilft, Fehler im Code zu vermeiden. Führen Sie dazu im Terminal aus:

npm install typescript @types/node --save-dev

Sie können die Installation überprüfen, indem Sie sie ausführen:

npx tsc --version

TypeScript verwendet eine Konfigurationsdatei namens tsconfig.json, um Compiler-Optionen und andere Einstellungen zu speichern. Um diese Datei in Ihrem Projekt zu erstellen, führen Sie den folgenden Befehl aus:

npx tsc -init

Stellen Sie sicher, dass der Wert für "outDir" auf "dist" gesetzt ist. Auf diese Weise trennen wir die TypeScript-Dateien von den kompilierten Dateien. Weitere Informationen über diese Datei und ihre Eigenschaften finden Sie in der offiziellen TypeScript-Dokumentation.

Erstellen Sie nun ein Verzeichnis "src" in Ihrem Projekt und eine neue Datei "index.ts". Hier werden wir den Scraping-Code speichern. Um TypeScript-Code auszuführen, müssen Sie ihn zuerst kompilieren. Um sicherzustellen, dass wir diesen zusätzlichen Schritt nicht vergessen, können wir einen benutzerdefinierten Befehl verwenden.

Gehen Sie zur Datei "package. json" und bearbeiten Sie den Abschnitt "scripts" wie folgt:

"scripts": {

    "test": "npx tsc && node dist/index.js"

}

Wenn Sie das Skript ausführen wollen, müssen Sie nur "npm run test" in Ihr Terminal eingeben.

Um die Daten von der Website abzugreifen, werden wir Puppeteer verwenden, eine Headless-Browser-Bibliothek für Node.js, mit der Sie einen Webbrowser steuern und programmatisch mit Websites interagieren können. Um sie zu installieren, führen Sie diesen Befehl im Terminal aus:

npm Puppeteer installieren

Es ist sehr empfehlenswert, wenn Sie die Vollständigkeit Ihrer Daten sicherstellen wollen, da viele Websites heutzutage dynamisch generierte Inhalte enthalten. Wenn Sie neugierig geworden sind, können Sie sich die Puppeteer-Dokumentation ansehen, bevor Sie fortfahren, um zu sehen, wozu das Programm in der Lage ist.

Auffinden der Daten

Nachdem Sie nun Ihre Umgebung eingerichtet haben, können wir mit dem Extrahieren der Daten beginnen. Für diesen Artikel habe ich mich entschieden, Daten von dieser Produktseite zu extrahieren: https://www.walmart.com/ip/Keter-Adirondack-Chair-Resin-Outdoor-Furniture-Teal/673656371.

Wir werden die folgenden Daten extrahieren:

  • den Produktnamen;
  • die Nummer der Produktbewertung;
  • die Produktbewertungen zählen;
  • den Produktpreis;
  • die Produktbilder;
  • die Einzelheiten des Produkts.

Alle diese Informationen sind in der nachstehenden Abbildung hervorgehoben:

Walmart-Produktseite für einen Adirondack-Stuhl für den Außenbereich, auf der die Bildergalerie, der Produkttitel und der Preis sowie der Beschreibungsbereich durch rote Kästchen hervorgehoben sind

Wenn Sie die Entwicklertools für jedes dieser Elemente öffnen, können Sie die CSS-Selektoren sehen, die wir zum Auffinden der HTML-Elemente verwenden werden. Wenn Sie mit der Funktionsweise von CSS-Selektoren noch nicht vertraut sind, können Sie diesen Leitfaden für Einsteiger nutzen.

Datenextraktion

Bevor wir unser Skript schreiben, sollten wir uns vergewissern, dass die Installation von Puppeteer ordnungsgemäß verlaufen ist:

import puppeteer from 'puppeteer';

async function scrapeWalmartData(walmart_url: string): Promise<void> {

    // Launch Puppeteer

    const browser = await puppeteer.launch({

        headless: false,

    	  args: ['--start-maximized'],

    	  defaultViewport: null

    })

    // Create a new page

    const page = await browser.newPage()

    // Navigate to the target URL

    await page.goto(walmart_url)

    // Close the browser

    await browser.close()

}

scrapeWalmartData("https://www.walmart.com/ip/Keter-Adirondack-Chair-Resin-Outdoor-Furniture-Teal/673656371")

Hier öffnen wir ein Browserfenster, erstellen eine neue Seite, navigieren zu unserer Ziel-URL und schließen dann den Browser. Der Einfachheit halber und der visuellen Fehlersuche halber öffne ich das Browserfenster in maximierter Größe im nicht kopflosen Modus.

Werfen wir nun einen Blick auf die Struktur der Website:

Walmart-Produktseite neben dem Browser-Inspector, wobei der Produkttitel, der Preis und die entsprechenden HTML-Elemente hervorgehoben sind

Um den Produktnamen zu erhalten, zielen wir auf das Attribut "itemprop" des Elements "h1". Das Ergebnis, nach dem wir suchen, ist sein Textinhalt.

// Extract product name

const product_name = await page.evaluate(() => {

    const name = document.querySelector('h1[itemprop="name"]')

    return name ? name.textContent : ''

})

console.log(product_name)

Für die Bewertungsnummer haben wir die "span"-Elemente, deren Klassenname auf "rating-number" endet, als zuverlässig identifiziert.

// Extract product rating number

const product_rating = await page.evaluate(() => {

    const rating = document.querySelector('span[class$="rating-number"]')

    return rating ? rating.textContent : ''

})

console.log(product_rating)

Und schließlich (für den hervorgehobenen Abschnitt) stützen wir uns für die Anzahl der Bewertungen und den Produktpreis auf das Attribut "itemprop", genau wie oben.

// Extract product reviews count

const product_reviews = await page.evaluate(() => {

    const reviews = document.querySelector('a[itemprop="ratingCount"]')

    return reviews ? reviews.textContent : ''

})

console.log(product_reviews)

// Extract product price

const product_price = await page.evaluate(() => {

    const price = document.querySelector('span[itemprop="price"]')

    return price ? price.textContent : ''

})

console.log(product_price)

Um zu den Produktbildern zu gelangen, navigieren wir weiter durch das HTML-Dokument:

Walmart-Produktseite mit hervorgehobenem Bild-Miniaturansichten-Karussell und Browser-Inspektor, der das ausgewählte Bildelement anzeigt

Etwas komplizierter, aber nicht unmöglich. Da wir die Bilder selbst nicht eindeutig identifizieren können, werden wir diesmal auf ihre übergeordneten Elemente abzielen. Daher extrahieren wir die "div"-Elemente, bei denen das Attribut "data-testid" auf "media-thumbnail" gesetzt ist.

Dann wandeln wir das Ergebnis in ein Javascript-Array um, damit wir jedes Element seinem "src"-Attribut zuordnen können.

// Extract product images

const product_images = await page.evaluate(() => {

    const images = document.querySelectorAll('div[data-testid="media-thumbnail"] > img')

    const images_array = Array.from(images)

    return images ? images_array.map(a => a.getAttribute("src")) : []

})

console.log(product_images)

Zu guter Letzt blättern wir auf der Seite nach unten, um uns die Produktdetails anzusehen:

Der Bereich mit den Produktdetails bei Walmart ist hervorgehoben, wobei der Browser-Inspector den HTML-Code für die Beschreibung und den Inhalt der Aufzählung anzeigt

Wir wenden dieselbe Logik wie beim Extrahieren der Bilder an und verwenden dieses Mal einfach den Klassennamen "dangerous-html".

// Extract product details

const product_details = await page.evaluate(() => {

    const details = document.querySelectorAll('div.dangerous-html')

    const details_array = Array.from(details)

    return details ? details_array.map(d => d.textContent) : []

})

console.log(product_details)

Das Endergebnis sollte wie folgt aussehen:

Keter Adirondack-Stuhl, Outdoor-Möbel aus Kunstharz, Blaugrün

(4,1)

269 Bewertungen

Jetzt 59,99 $

[

'https://i5.walmartimages.com/asr/51fc64d9-6f1f-46b7-9b41-8880763f6845.483f270a12a6f1cbc9db5a37ae7c86f0.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF',  'https://i5.walmartimages.com/asr/80977b5b-15c5-435e-a7d6-65f14b2ee9c9.d1deed7ca4216d8251b55aa45eb47a8f.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF',

'https://i5.walmartimages.com/asr/80c1f563-91a9-4bff-bda5-387de56bd8f5.5844e885d77ece99713d9b72b0f0d539.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF',  'https://i5.walmartimages.com/asr/fd73d8f2-7073-4650-86a3-4e809d09286e.b9b1277761dec07caf0e7354abb301fc.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF',

'https://i5.walmartimages.com/asr/103f1a31-fbc5-4ad6-9b9a-a298ff67f90f.dd3d0b75b3c42edc01d44bc9910d22d5.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF',  'https://i5.walmartimages.com/asr/120121cd-a80a-4586-9ffb-dfe386545332.a90f37e11f600f88128938be3c68dca5.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF',

'https://i5.walmartimages.com/asr/47b8397f-f011-4782-bbb7-44bfac6f3fcf.bb12c15a0146107aa2dcd4cefba48c38.jpeg?odnHeight=80&odnWidth=80&odnBg=FFFFFF'

]

[

  'Mit dem Keter Adirondack-Stuhl genießen Sie den entspannten Komfort des beliebten Stuhls, ohne sich um Holz kümmern zu müssen. Dieser Stuhl verbindet traditionelles Design und die Optik und Haptik von Holz mit langlebigen und pflegefreien Materialien und wird',

  'Keter Adirondack-Stuhl, Outdoor-Möbel aus Kunststoff, grau:   Hergestellt aus wetterbeständigem Kunststoff für ultimative Langlebigkeit  Die wetterbeständige Polypropylen-Konstruktion verhindert Ausbleichen, Rosten, Abblättern und Dellen – im Gegensatz zu echtem Holz  Schnelle und einfache Montage  Drehbarer Getränkehalter  Klassischer Komfort neu definiert  Ergonomisches Design  Langlebig und wetterbeständig  Sorgloses Entspannen  Abmessungen: 81 cm L x 80 cm B x 97 cm H  Die Sitzhöhe beträgt 39 cm für einen tiefen Schalensitz und eine hohe Rückenlehne  Der Stuhl wiegt 10 kg – schwer genug, um nicht vom Wind umgeworfen zu werden, und dennoch leicht genug, um Ihren Terrassenbereich mühelos umzugestalten  Belastbarkeit: 160 kg '

]

Umgehung der Bot-Erkennung

Während das Scrapen von Walmart anfangs einfach erscheint, kann der Prozess komplexer und schwieriger werden, wenn Sie Ihr Projekt erweitern. Die Einzelhandelswebsite setzt verschiedene Techniken ein, um automatisierten Datenverkehr zu erkennen und zu verhindern, sodass Ihr Scraper bei einer Erweiterung blockiert wird.

Walmart verwendet das "Press & Hold"-Modell von CAPTCHA, das von PerimeterX angeboten wird und von dem bekannt ist, dass es fast unmöglich ist, es mit Ihrem Code zu lösen. Darüber hinaus verwendet die Website auch Schutzmechanismen von Akamai und ThreatMetrix und sammelt mehrere Browserdaten, um einen eindeutigen Fingerabdruck zu erstellen und Ihnen zuzuordnen.

Unter den gesammelten Browserdaten finden wir:

  • Eigenschaften des Navigator-Objekts (deviceMemory, hardwareConcurrency, languages, platform, userAgent, webdriver, usw.)
  • Fingerabdruck auf Leinwand
  • Zeit- und Leistungskontrollen
  • Plugin und Sprachaufzählung
  • Web-Mitarbeiter
  • Prüfung der Bildschirmabmessungen
  • und viele mehr

Eine Möglichkeit, diese Herausforderungen zu überwinden und das Scrapen in großem Maßstab fortzusetzen, ist die Verwendung einer Scraping-API. Diese Art von Diensten bietet eine einfache und zuverlässige Möglichkeit, auf Daten von Websites wie walmart.com zuzugreifen, ohne dass Sie einen eigenen Scraper entwickeln und pflegen müssen.

WebScrapingAPI ist ein Beispiel für ein solches Produkt. Sein Proxy-Rotationsmechanismus vermeidet CAPTCHAs gänzlich, und seine erweiterte Wissensbasis macht es möglich, die Browserdaten nach dem Zufallsprinzip so zu gestalten, dass sie wie ein echter Benutzer aussehen.

Die Einrichtung ist schnell und einfach. Alles, was Sie tun müssen, ist, ein Konto zu registrieren, damit Sie Ihren API-Schlüssel erhalten. Auf diesen können Sie über Ihr Dashboard zugreifen, und er wird zur Authentifizierung der von Ihnen gesendeten Anfragen verwendet.

Startseite des WebScrapingAPI-Dashboards mit einer dreistufigen Schnellstartanleitung sowie Links zum API-Schlüssel, zum API-Playground und zur Dokumentation

Da Sie Ihre Node.js-Umgebung bereits eingerichtet haben, können wir das entsprechende SDK verwenden. Führen Sie den folgenden Befehl aus, um es zu Ihren Projektabhängigkeiten hinzuzufügen:

npm install webscrapingapi

Jetzt müssen nur noch die bisherigen CSS-Selektoren an die API angepasst werden. Die leistungsstarke Funktion der Extraktionsregeln ermöglicht es, Daten ohne wesentliche Änderungen zu analysieren.

import webScrapingApiClient from 'webscrapingapi';

const client = new webScrapingApiClient("YOUR_API_KEY");

async function exampleUsage() {

    const api_params = {

        'render_js': 1,

    	  'proxy_type': 'residential',

    	  'timeout': 60000,

    	  'extract_rules': JSON.stringify({

            name: {

                selector: 'h1[itemprop="name"]',

                output: 'text',

        	},

        	rating: {

                selector: 'span[class$="rating-number"]',

                output: 'text',

        	},

        	reviews: {

                selector: 'a[itemprop="ratingCount"]',

                output: 'text',

        	},

        	price: {

                selector: 'span[itemprop="price"]',

                output: 'text',

        	},

        	images: {

                selector: 'div[data-testid="media-thumbnail"] > img',

                output: '@src',

                all: '1'

        	},

        	details: {

                selector: 'div.dangerous-html',

                output: 'text',

                all: '1'

        	}

        })

    }

    const URL = "https://www.walmart.com/ip/Keter-Adirondack-Chair-Resin-Outdoor-Furniture-Teal/673656371"

    const response = await client.get(URL, api_params)

    if (response.success) {

        console.log(response.response.data)

    } else {

        console.log(response.error.response.data)

    }

}

exampleUsage();

Schlussfolgerung

Dieser Artikel bietet Ihnen einen Überblick über das Web Scraping von Walmart mit TypeScript und Puppeteer. Wir haben den Prozess der Einrichtung der erforderlichen Umgebung, die Identifizierung und Extraktion der Daten besprochen und Code-Schnipsel und Beispiele bereitgestellt, um Sie durch den Prozess zu führen.

Zu den Vorteilen des Scrapings von Walmart-Daten gehört es, wertvolle Einblicke in das Verbraucherverhalten, Markttrends, Preisüberwachung und vieles mehr zu gewinnen.

Darüber hinaus kann die Entscheidung für einen professionellen Scraping-Service eine effizientere Lösung sein, da er sicherstellt, dass der Prozess vollständig automatisiert ist und die möglichen Bot-Erkennungstechniken berücksichtigt.

Wenn Sie sich die Daten von Walmart zunutze machen, können Sie Ihr Unternehmen zum Erfolg führen und der Konkurrenz einen Schritt voraus sein. Denken Sie daran, immer die Nutzungsbedingungen der Website zu respektieren und nicht zu aggressiv zu scrapen, damit Sie nicht gesperrt werden.

Über den Autor
Raluca Penciuc, Full-Stack-Entwicklerin bei WebScrapingAPI
Raluca PenciucFull-Stack-Entwickler

Raluca Penciuc ist Full-Stack-Entwicklerin bei WebScrapingAPI. Sie entwickelt Scraper, optimiert Umgehungsstrategien und findet zuverlässige Wege, um die Erkennung auf Zielwebsites zu verringern.

Los geht’s

Sind Sie bereit, Ihre Datenerfassung zu erweitern?

Schließen Sie sich den über 2.000 Unternehmen an, die WebScrapingAPI nutzen, um Webdaten im Unternehmensmaßstab ohne zusätzlichen Infrastrukturaufwand zu extrahieren.