Zurück zum Blog
Anleitungen
Raluca PenciucLast updated on Mar 31, 20266 min read

Der ultimative Leitfaden zum Web-Scraping bei Walmart

Der ultimative Leitfaden zum Web-Scraping bei Walmart

Das Web-Scraping von Walmart ist sowohl bei Datenbegeisterten als auch bei Unternehmen ein beliebtes Thema. Walmart ist eines der größten Einzelhandelsunternehmen der Welt und stellt auf seiner Website eine riesige Datenmenge zur Verfügung. Durch das Scraping dieser Daten können Sie wertvolle Einblicke in das Verbraucherverhalten, Markttrends und vieles mehr gewinnen.

In diesem Artikel werden wir den Prozess des Web-Scrapings bei Walmart mit TypeScript und Puppeteer untersuchen. Wir werden auch die Einrichtung der Umgebung, die Identifizierung der Daten und deren Extraktion für die Verwendung in Ihren eigenen Projekten behandeln. Am Ende werden wir erörtern, warum die Verwendung eines professionellen Scrapers eine effektivere und zuverlässigere Lösung sein kann.

Am Ende dieses Leitfadens werden Sie ein solides Verständnis des Prozesses haben und in der Lage sein, ihn zur Verbesserung Ihres Unternehmens oder Ihrer Forschung zu nutzen. Ganz gleich, ob Sie Datenwissenschaftler, Marketingfachmann oder Unternehmer sind – dieser Leitfaden wird Ihnen helfen, die Leistungsfähigkeit der Walmart-Daten zu nutzen, um Ihren Erfolg voranzutreiben.

Voraussetzungen

Bevor wir beginnen, stellen wir sicher, dass wir über die erforderlichen Tools verfügen.

Laden Sie zunächst Node.js von der offiziellen Website herunter und installieren Sie es. Achten Sie dabei darauf, die Long-Term-Support-Version (LTS) zu verwenden. Dadurch wird automatisch auch der Node Package Manager (NPM) installiert, den wir zur Installation weiterer Abhängigkeiten nutzen werden.

Für dieses Tutorial verwenden wir Visual Studio Code als unsere integrierte Entwicklungsumgebung (IDE), aber Sie können jede 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 Datei namens package.json in Ihrem Projektverzeichnis erstellt, in der Informationen zu Ihrem Projekt und dessen Abhängigkeiten gespeichert werden.

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

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

Sie können die Installation überprüfen, indem Sie Folgendes 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 zu dieser Datei und ihren Eigenschaften finden Sie in der offiziellen TypeScript-Dokumentation.

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

Öffne die Datei „package.json“ und bearbeite den Abschnitt „scripts“ wie folgt:

"scripts": {

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

}

Auf diese Weise müssen Sie beim Ausführen des Skripts lediglich „npm run test“ in Ihr Terminal eingeben.

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

npm install puppeteer

Dies ist sehr empfehlenswert, wenn du die Vollständigkeit deiner Daten sicherstellen möchtest, da viele Websites heutzutage dynamisch generierte Inhalte enthalten. Wenn du neugierig bist, kannst du dir vor dem Fortfahren die Puppeteer-Dokumentation ansehen, um einen umfassenden Überblick über die Möglichkeiten zu erhalten.

Die Daten finden

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

Wir werden die folgenden Daten extrahieren:

  • den Produktnamen;
  • die Produktbewertung;
  • die Anzahl der Produktbewertungen;
  • den Produktpreis;
  • die Produktbilder;
  • die Produktdetails.

All diese Informationen sind im folgenden Screenshot hervorgehoben:

Wenn Sie für jedes dieser Elemente die Entwicklertools öffnen, können Sie die CSS-Selektoren erkennen, die wir zum Auffinden der HTML-Elemente verwenden werden. Wenn Sie noch nicht so vertraut mit der Funktionsweise von CSS-Selektoren sind, können Sie gerne diesen Leitfaden für Anfänger zu Rate ziehen.

Datenextraktion

Bevor wir unser Skript schreiben, überprüfen wir, ob die Installation von Puppeteer erfolgreich war:

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 und zur visuellen Fehlerbehebung halber öffne ich das Browserfenster im maximierten Modus im Nicht-Headless-Modus.

Werfen wir nun einen Blick auf die Struktur der Website:

Um den Produktnamen zu erhalten, zielen wir auf das „itemprop“-Attribut des „h1“-Elements ab. Das gesuchte Ergebnis ist dessen 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 Bewertungszahl haben wir die „span“-Elemente als zuverlässig identifiziert, deren Klassenname mit „rating-number“ endet.

// 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 wie oben beschrieben auf das „itemprop“-Attribut.

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

Weiter geht es mit den Produktbildern, wofür wir tiefer in das HTML-Dokument vordringen:

Etwas kniffliger, aber nicht unmöglich. Wir können die Bilder nicht eindeutig anhand ihrer Eigenschaften identifizieren, daher zielen wir diesmal auf ihre übergeordneten Elemente ab. Daher extrahieren wir die „div“-Elemente, bei denen das Attribut „data-testid“ auf „media-thumbnail“ gesetzt ist.

Anschließend 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)

Und zu guter Letzt scrollen wir auf der Seite nach unten, um die Produktdetails zu überprüfen:

Wir wenden dieselbe Logik wie beim Extrahieren der Bilder an und nutzen diesmal 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 Chair, Resin Outdoor Furniture, Teal

(4.1)

269 reviews

Now $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'

]

[

  'The Keter Adirondack chair lets you experience the easy-living comfort of the popular chair but with none of the worries of wood. Combining traditional styling and the look and feel of wood with durable and maintenance-free materials, this chair will find',

  'Keter Adirondack Chair, Resin Outdoor Furniture, Gray:   Made from an all-weather resistant resin for ultimate durability  Weather-resistant polypropylene construction prevents fading, rusting, peeling, and denting - unlike real wood  Quick and easy assembly  Rotating cup holder  Classic comfort redefined  Ergonomic design  Durable and weather-resistant  Worry-free relaxation  Dimensions: 31.9" L x 31.5" W x 38" H  Seat height is 15.4 in. for a deep bucket seat and tall backrest  Chair Weighs 22 lbs. - heavy enough to not blow over in the wind, yet light enough to easily rearrange your patio space  350 lbs. capacity '

]

Bot-Erkennung umgehen

Auch wenn das Scraping von Walmart auf den ersten Blick einfach erscheint, kann der Prozess mit zunehmender Projektgröße komplexer und anspruchsvoller werden. Die Einzelhandelswebsite setzt verschiedene Techniken ein, um automatisierten Traffic zu erkennen und zu verhindern, sodass Ihr skalierter Scraper zunehmend blockiert wird.

Walmart verwendet das „Press & Hold“-Modell von CAPTCHA, das von PerimeterX angeboten wird und bekanntermaßen aus Ihrem Code heraus fast unmöglich zu lösen ist. Darüber hinaus nutzt die Website auch Schutzmaßnahmen von Akamai und ThreatMetrix und sammelt verschiedene Browserdaten, um einen eindeutigen Fingerabdruck zu generieren und Ihnen zuzuordnen.

Zu den gesammelten Browserdaten gehören:

  • Eigenschaften des Navigator-Objekts (deviceMemory, hardwareConcurrency, languages, platform, userAgent, webdriver usw.)
  • Canvas-Fingerprinting
  • Zeit- und Leistungsprüfungen
  • Plugin- und Sprach-Enumeration
  • Web Workers
  • Überprüfung der Bildschirmabmessungen
  • und vieles mehr

Eine Möglichkeit, diese Herausforderungen zu bewältigen und weiterhin in großem Umfang zu scrapen, 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 erstellen und warten müssen.

WebScrapingAPI ist ein Beispiel für ein solches Produkt. Sein Proxy-Rotationsmechanismus umgeht CAPTCHAs vollständig, und seine erweiterte Wissensdatenbank ermöglicht es, die Browserdaten zu randomisieren, sodass sie wie die eines echten Nutzers aussehen.

Die Einrichtung ist schnell und einfach. Sie müssen lediglich ein Konto registrieren, um Ihren API-Schlüssel zu erhalten. Dieser ist über Ihr Dashboard zugänglich und dient zur Authentifizierung der von Ihnen gesendeten Anfragen.

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

npm install webscrapingapi

Jetzt müssen Sie nur noch die bisherigen CSS-Selektoren an die API anpassen. Die leistungsstarken Extraktionsregeln ermöglichen es, Daten ohne wesentliche Änderungen zu parsen.

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

Fazit

Dieser Artikel hat Ihnen einen Überblick über das Web-Scraping bei Walmart mit TypeScript und Puppeteer gegeben. Wir haben den Prozess der Einrichtung der erforderlichen Umgebung sowie die Identifizierung und Extraktion der Daten erläutert und Code-Schnipsel und Beispiele bereitgestellt, die Sie durch den Prozess führen.

Zu den Vorteilen des Scrapings von Walmarts Daten gehören wertvolle Einblicke in das Verbraucherverhalten, Markttrends, Preisüberwachung und vieles mehr.

Darüber hinaus kann die Entscheidung für einen professionellen Scraping-Dienst eine effizientere Lösung sein, da dieser den Prozess vollständig automatisiert und mögliche Bot-Erkennungstechniken umgeht.

Indem Sie die Leistungsfähigkeit der Walmart-Daten nutzen, können Sie Ihr Unternehmen zum Erfolg führen und der Konkurrenz einen Schritt voraus sein. Denken Sie daran, stets die Nutzungsbedingungen der Website zu beachten und nicht zu aggressiv zu scrapen, um eine Sperrung zu vermeiden.

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

Raluca Penciuc ist Full-Stack-Entwicklerin bei WebScrapingAPI. Sie entwickelt Scraper, verbessert 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.