Zum Inhalt

So führen Sie Web Scrape durch Walmart.com

Walmart ist der weltweit größte Einzelhändler mit über 10,000 Geschäften in 24 Ländern. Aufgrund seines enormen Lagerbestands und seiner umfangreichen Produktdaten ist Walmart ein äußerst wertvolles Ziel für Web Scraping.

In diesem umfassenden Leitfaden zeigen wir Ihnen, wie Sie einen Web-Scraper erstellen, um Walmart-Produktdaten in großem Maßstab zu extrahieren.

Überblick

Hier ist ein kurzer Überblick über die wichtigsten Schritte, die wir behandeln werden:

  • Produkte zum Schaben finden
    • Verwendung der Walmart-Such-API
    • Parsen von Kategorieseiten
    • Umgang mit Ergebnisgrenzen
  • Scraping von Produktseiten
    • Produktdaten analysieren
    • Scraping-Medien, Preise, Spezifikationen usw.
  • Blockieren vermeiden
    • Zufällige Verzögerungen
    • Verwenden von Proxys
    • Nachahmung echter Browser
  • Putting It All Together
    • Such-API → Produkt-URLs → Scrape
    • Umgang mit großen Ergebnismengen

Am Ende verfügen Sie über einen voll funktionsfähigen Walmart-Scraper in Python, der Tausende von Produkten extrahieren kann. Lass uns anfangen!

Einrichtung

Wir werden verwenden Python zusammen mit mehreren Schlüsselpaketen:

  • Zugriffe – zum Senden von HTTP-Anfragen an Walmarts API und Webseiten
  • schönesuppe4 – HTML-Analyse
  • Pandas – zur Datenmanipulation

Installieren Sie sie über pip:

pip install requests beautifulsoup4 pandas

Wir werden auch verwenden Proxies um Sperren zu vermeiden, die bei verschiedenen Anbietern erworben werden können.

Produkte zum Schaben finden

Der erste Schritt besteht darin, Produkt-URLs oder -IDs zu ermitteln, die in unseren Scraper eingegeben werden sollen. Es gibt einige Ansätze, die wir verwenden können:

Verwenden der Such-API

Walmart bietet eine Such-API, die strukturierte JSON-Daten zurückgibt. Wir können diese API abfragen, um Produkte zu finden, die mit Schlüsselwörtern übereinstimmen.

Probieren wir es mal für „Laptop“ aus:

import requests

api_url = "https://www.walmart.com/terra-firma/api/search"

params = {
  "query": "laptop", 
  "sort": "price_low",
  "page": 1,
  " affiliateId": "test",
}

response = requests.get(api_url, params=params)
data = response.json()

print(data["items"][0]["productId"])
# prints a product ID, e.g. 1GY23EA#ABA

Diese API gibt paginierte Ergebnisse in einem strukturierten JSON-Format zurück, das Folgendes enthält:

  • productId – die Walmart-ID für dieses Produkt
  • title - Produktname
  • description – kurze Textbeschreibung
  • price - derzeitiger Preis
  • Und mehr ...

Wir können Seiten durchlaufen, um IDs und Daten zu sammeln.

Eine Einschränkung besteht darin, dass die API nur das Abrufen von bis zu 1000 Ergebnissen zulässt. Um mehr Abdeckung zu erreichen, müssen wir auch andere Ansätze nutzen.

Parsen von Kategorieseiten

Walmart bietet auch durchsuchbare Kategorieseiten, die wir analysieren können:

https://www.walmart.com/browse/electronics/laptops/3944_3951_132959?povid=113750++2019-11-04+15%3A05%3A24.517-06%3A00&povid=113750++2019-11-04+15%3A05%3A24.517-06%3A00&affinityOverride=default

Diese Seiten enthalten die Produktraster, die wir auf der Walmart-Website sehen.

Um Produkte zu extrahieren, verwenden wir Beautiful Soup:

from bs4 import BeautifulSoup
import requests

url = "https://www.walmart.com/browse/electronics/laptops/3944_3951_132959"

response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

products = soup.select(".search-result-gridview-item")

for product in products:
  title = product.select_one(".search-result-product-title").text
  link = product.select_one(".search-result-product-title")["href"]

  print(title, link)

Dadurch werden die Produkte der Raster-/Listenansicht analysiert und der Titel und die URL erfasst.

Anschließend können wir die URLs in unseren Produkt-Scraper einspeisen.

Kategorieseiten können auf vielen Seiten Tausende von Produkten enthalten, daher bietet diese Methode eine große Abdeckung.

Umgang mit Grenzen

Zwischen der Such-API und den Kategorieseiten können wir Tausende von Produkten entdecken. Es sind jedoch einige Grenzen zu beachten:

  • Die Such-API erlaubt nur das Abrufen von 1000 Ergebnissen
  • Jede Kategorieseite hat maximal 24 Seiten, ca. 50 Produkte pro Seite

Für einen umfassenden Scrape müssen wir also kreativ werden:

  • Verwenden Sie mehrere Suchanfragen mit einschränkenden Filtern
  • Durchsuchen Sie mehrere Kategorieseiten
  • Erweitern Sie den Anwendungsbereich, z. Scraping aller Laptops in der Elektronikbranche

Mit ein wenig Iteration können wir einen großen Korpus von über 10,000 Produkt-URLs aufbauen, die für die Eingabe in unseren Scraper geeignet sind.

Scraping von Produktseiten

Sobald wir Produkt-URLs oder -IDs haben, können wir die Daten von den Produktseiten selbst extrahieren.

Auf den Walmart-Produktseiten finden wir zahlreiche Informationen, die wir extrahieren können:

  • Titel Beschreibung
  • Bilder
  • Preis, Verkaufsdaten
  • Spezifikationen
  • Verkäuferinformationen
  • Bewertungen
  • Das könnte Dich auch interessieren
  • Lagerverfügbarkeit

Und mehr.

Lassen Sie uns durch das Auskratzen einiger wichtiger Teile gehen.

Produktdetails abkratzen

Produktseiten enthalten ein JavaScript-Objekt namens window.__WML_REDUX_INITIAL_STATE__ mit vielen der strukturierten Daten:

<script>
  window.__WML_REDUX_INITIAL_STATE__ = {
    "product": {
      "id": "1GY23EA#ABA",
      "usItemId": "497219257", 
      "name": "HP 14-inch Laptop, Intel Core i3-1005G1, 4GB SDRAM, 128GB SSD, Pale Gold, Windows 10 Home",
      "description": "A laptop with the performance you need and..."
      ...
    }
    ...
  }
</script>

Wir können dies extrahieren und den JSON analysieren, um Felder wie die folgenden zu erhalten:

import json
import requests
from bs4 import BeautifulSoup

product_url = "https://www.walmart.com/ip/497219257" 

response = requests.get(product_url)
soup = BeautifulSoup(response.text, ‘html.parser‘)

data = soup.find("script", {"id": "__WML_REDUX_INITIAL_STATE__"})
product_data = json.loads(data.contents[0])["product"]

title = product_data["name"]
walmart_id = product_data["usItemId"]
description = product_data["description"]

print(title)
# "HP 14-inch Laptop, Intel Core i3-1005G1, 4GB SDRAM, 128GB SSD, Pale Gold, Windows 10 Home" 

Dieses JSON-Feld enthält die meisten Kernproduktinformationen, die wir extrahieren möchten.

Kratzen von Medien

Die Produktmedien wie Bilder sind in einem anderen Skriptblock enthalten. imageAssets:

<script>
window.__WML_REDUX_INITIAL_STATE__.pdpData.item.imageAssets = [
  {
    "assetSize": "medium",
    "assetUrl": "https://i5.walmartimages.com/...", 
    "baseAsset": {...},
    "thumbnailUrl": "https://i5.walmartimages.com/..." 
  },
  {...}
];
</script>

Wir können die Assets durchsuchen und iterieren, um URLs unterschiedlicher Größe zu finden:

images = []

for asset in product_data["imageAssets"]:
  img_url = asset["assetUrl"]
  images.append(img_url)

print(images[0])
# "https://i5.walmartimages.com/asr/e95444a3-2e8b-41d2-a585-4f3ea9fc51b6.345fba144e9df8a6d290b2ed3857e90b.jpeg"

Dadurch können wir alle Produktbilder in unterschiedlichen Auflösungen erhalten.

Kratzpreis und Lagerbestand

Für wichtige Details wie Preise und Verfügbarkeit sind die Daten in einem weiteren Skript-Tag enthalten:

<script>
window.__WML_REDUX_INITIAL_STATE__.pdpData.item.priceInfo =  {
  "priceDisplayCodes": {
    "rollback": true,
    "reducedPrice": true    
  },
  "currentPrice": {
    "currencyUnit": "USD", 
    "price": 399
  }
  ...

Wir können die Preisfelder analysieren:

price_data = product_data["priceInfo"]

regular_price = price_data["wasPrice"]["price"] # 499 
sale_price = price_data["currentPrice"]["price"] # 399
on_sale = "rollback" in price_data["priceDisplayCodes"] # True

print(f"On sale for {sale_price}, regular {regular_price}")

Und das Gleiche gilt für den Lagerbestand, der in der enthalten ist availabilityStatus:

in_stock = product_data["availabilityStatus"] == "IN_STOCK"

Zusammenfassend können wir Scraper für Produktdetails, Medien, Preise, Lagerbestände und mehr erstellen!

Blockaden vermeiden

Wenn wir Walmart in großem Maßstab durchsuchen, werden wir wahrscheinlich auf Blockaden aufgrund zu vieler Anfragen stoßen. Hier sind einige Tipps, um dies zu vermeiden:

  • Anfragerate begrenzen – Halten Sie sich an maximal 2–3 Anfragen pro Sekunde

  • Verzögerungen randomisieren – Fügen Sie zufällige Verzögerungen von 2–5 Sekunden zwischen den Anfragen ein

  • Benutzeragenten rotieren – verschiedene Desktop-Browser-Benutzeragenten fälschen

  • Verwenden Sie Proxys – Leiten Sie den Datenverkehr über private Proxy-Dienste weiter

  • Versuchen Sie es erneut mit Blöcken – Wenn es blockiert ist, unterbrechen Sie das Schaben für mehr als 30 Minuten

Mit diesen Vorsichtsmaßnahmen können wir Tausende von Walmart-Produkten sicher entsorgen.

Einige kostenpflichtige Proxy-Dienste bieten auch erweiterte rotierende IPs und Header an, um Blockaden zu vermeiden. Diese können beim Schaben in größerem Maßstab hilfreich sein.

Putting It All Together

Lassen Sie uns abschließend die Schlüsselkomponenten zu einem vollständigen Walmart Web Scraper zusammenfügen.

Der allgemeine Ablauf wird sein:

  1. Entdecken Sie Produkte mithilfe der Such-API und Kategorieseiten
  2. Sammeln Sie Produkt-URLs
  3. Durchlaufen Sie URLs, um jede Produktseite zu durchsuchen
  4. Extrahieren Sie Details, Medien, Preise, Inventar usw.
  5. Speichern Sie die gecrackten Produktdaten im CSV/JSON-Format

Hier ist Beispielcode:

from bs4 import BeautifulSoup
import requests, json, time, random

# Product URL extraction functions...

def scrape_search_api(query):
  # Search API logic...

def scrape_category_pages(url):
  # Category parsing logic...  

product_urls = []

product_urls.extend(scrape_search_api("laptops"))
product_urls.extend(scrape_category_pages("https://www...")) 

# Add proxies here...

for url in product_urls:

  response = requests.get(url)

  soup = BeautifulSoup(response.text, ‘html.parser‘)

  # Extract product data...

  product = {
    "name": name,
    "description": description,
    "price": price,
    "images": images,
    "in_stock": in_stock
  }

  # Save product to CSV, database, etc...

  # Random delay  
  time.sleep(random.uniform(2, 5))

Dadurch werden die Schlüsselelemente implementiert, die wir behandelt haben:

  • Generieren von Produkt-URLs zur Eingabe in den Scraper
  • Analysieren Sie jede Produktseite mit BeautifulSoup
  • Extrahieren von Details, Medien, Preisen und Inventar
  • Hinzufügen von Proxys und zufälligen Verzögerungen, um Blockaden zu vermeiden
  • Gekratzte Daten in einer Datei speichern

Mit dieser Struktur können wir Tausende von Walmart-Produkten robust abkratzen und extrahieren.

Der vollständige Code würde eine erweiterte Fehlerbehandlung, Multithreading usw. enthalten. Dies deckt jedoch die Kernlogik und den Arbeitsablauf ab.

Zusammenfassung

In diesem Leitfaden haben wir den Aufbau eines umfassenden Web-Scrapers für Walmart-Produktdaten mit Python erläutert.

Zu den Schlüsseltechniken gehörten:

  • Verwendung der Such-API und Kategorieseiten von Walmart zum Generieren von Produkt-URLs
  • Analysieren von Produktseiten und Extrahieren von Details, Medien, Preisen und Inventar
  • Vermeidung von Blockaden durch Proxys, Verzögerungen und Spoofing
  • Verknüpfung von Suche → Produkt-Scraping → Arbeitsablauf speichern

Mit diesen Ansätzen können Tausende von Walmart-Produkten zuverlässig extrahiert werden. Die Daten können dann für Preisüberwachung, Marktforschung, Dropshipping und mehr genutzt werden.

Mit einigen Verbesserungen wie Multithreading und Datenbankspeicherung verfügen Sie über eine leistungsstarke Walmart-Scraping-Lösung, die für den Einsatz in großem Maßstab bereit ist.

Stichworte:

Mitreden

E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind MIT * gekennzeichnet. *