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 Produkttitle
- Produktnamedescription
– kurze Textbeschreibungprice
- 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:
- Entdecken Sie Produkte mithilfe der Such-API und Kategorieseiten
- Sammeln Sie Produkt-URLs
- Durchlaufen Sie URLs, um jede Produktseite zu durchsuchen
- Extrahieren Sie Details, Medien, Preise, Inventar usw.
- 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.