Anleitung zum Scrapen von Walmart-Daten mit Python

Bemerkungen: 0

Business Intelligence, Forschung und Analyse sind nur einige der endlosen Möglichkeiten, die sich durch Web Scraping ergeben. Ein vollwertiges Unternehmen wie Walmart bietet uns eine perfekte Struktur, um die erforderlichen Informationen zu sammeln. Wir können mit Hilfe verschiedener Scraping-Techniken ganz einfach Walmart-Daten wie Name, Preis und Bewertungsinformationen von den zahlreichen Websites abrufen.

In diesem Artikel werden wir den Prozess des Scrappens von Walmart-Daten erläutern. Wir werden requests zum Senden von HTTP-Anfragen und lxml zum Parsen der zurückgegebenen HTML-Dokumente verwenden.

Warum Python zum Scrapen von Walmart-Daten verwenden?

Wenn es darum geht, Produktdaten auf mehreren Einzelhandels-Websites zu erfassen, ist Python eine der effektivsten Optionen. Hier erfahren Sie, wie es sich nahtlos in Extraktionsprojekte integrieren lässt:

  1. Erweiterte Bibliotheken. Durch das Vorhandensein von Requests für die Web-Interaktion und lxml für das HTML-Parsing können Sie riesige Online-Kataloge mit äußerster Leichtigkeit und Effektivität scrapen.
  2. Benutzerfreundlichkeit. Dank der einfach zu bedienenden Syntax können die Benutzer Datenabrufe mit wenig oder gar keiner Erfahrung programmieren und so direkt zur Sache kommen.
  3. Unterstützung durch die Gemeinschaft. Die Komplexität von Einzelhandelswebsites bedeutet, dass es eine Fülle von qualifizierten Ressourcen und Unterstützung durch die Community gibt, die Ihnen bei der Lösung auftretender Probleme helfen.
  4. Umgang mit Daten. Vertiefte Analyse. Mit Hilfe von Pandas für den Umgang mit Daten und Matplotlib für die visuelle Darstellung ermöglicht Python die Analyse von Daten auf breiterer Ebene, z. B. die Sammlung und Analyse.
  5. Verwaltung von dynamischen Inhalten. Mit Selenium wird eine Interaktion mit den dynamischen Web-Elementen möglich, die dafür sorgt, dass eine umfangreiche Datenerfassung, auch von JavaScript geladenen Seiten, erreicht wird.
  6. Effektive Skalierung. Mit der Fähigkeit, riesige und winzige Datensätze zu verwalten, ist Python selbst bei umfangreichen Datenextraktionsaktivitäten über lange Zeiträume hinweg äußerst leistungsfähig.

Die Verwendung einer solchen Sprache für Projekte im Einzelhandel vereinfacht nicht nur den technischen Aspekt, sondern erhöht auch die Effizienz und den Umfang der Analyse, was sie zur ersten Wahl für Experten macht, die sich ein tiefes Wissen über den Markt aneignen wollen. Diese Aspekte können besonders nützlich sein, wenn man sich für das Scrapen von Walmart-Daten entscheidet.

Beginnen wir nun mit dem Aufbau eines Walmart Web Scraping Tools.

Einrichten der Umgebung zum Scrapen von Walmart-Daten

Stellen Sie zu Beginn sicher, dass Python auf Ihrem Computer installiert ist. Die erforderlichen Bibliotheken können mit pip heruntergeladen werden:


pip install requests
pip install  lxml
pip install urllib3

Jetzt importieren wir solche Bibliotheken wie:

  • requests - zum Abrufen von Webseiten über HTTP;
  • lxml - für die Erzeugung von HTML-Dokumenten;
  • CSV - zum Schreiben gesammelter Daten in CSV-Dateien;
  • random - für die Auswahl von Proxy- und User-Agent-Strings.

import requests
from lxml import html
import csv
import random
import urllib3
import ssl

Produkt-URLs definieren

Eine Liste von Produkt-URLs zum Abrufen von Walmart-Daten kann wie folgt hinzugefügt werden.


product_urls = [
    'link with https',
    'link with https',
    'link with https'
]

Benutzer-Agent-Strings und Proxys

Beim Web Scraping von Walmart ist es wichtig, die richtigen HTTP-Header zu verwenden, insbesondere den User-Agent-Header, um einen echten Browser zu imitieren. Außerdem können die Anti-Bot-Systeme der Website auch durch die Verwendung rotierender Proxy-Server umgangen werden. Im folgenden Beispiel werden die User-Agent-Strings zusammen mit Anweisungen zum Hinzufügen der Proxy-Server-Autorisierung nach IP-Adresse dargestellt.


user_agents = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]

proxy = [
    '<ip>:<port>',
    '<ip>:<port>',
    '<ip>:<port>',
]

Kopfzeilen für Anfragen

Die Header der Anfragen sollten so gesetzt werden, dass sie als vom Browser des Nutzers stammend getarnt sind. Das ist sehr hilfreich, wenn Sie versuchen, Walmart-Daten abzugreifen. Hier ist ein Beispiel, wie es aussehen würde:


headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-IN,en;q=0.9',
    'dnt': '1',
    'priority': 'u=0, i',
    'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Linux"',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
}

Datenspeicher initialisieren

Der erste Schritt besteht darin, eine Struktur zu erstellen, die Produktdaten aufnehmen kann.


product_details = []

Das Aufzählen von URL-Seiten funktioniert folgendermaßen: Für jede URL-Seite wird eine GET-Anfrage mit einem zufällig ausgewählten User-Agent und einem Proxy gestartet. Nachdem eine HTML-Antwort zurückgegeben wurde, wird sie auf die Produktdetails einschließlich des Namens, des Preises und der Bewertungen geparst. Die relevanten Details werden in der Wörterbuchdatenstruktur gespeichert, die später der zuvor erstellten Liste hinzugefügt wird.


for url in product_urls:
   headers['user-agent'] = random.choice(user_agents)
   proxies = {
       'http': f'http://{random.choice(proxy)}',
       'https': f'http://{random.choice(proxy)}',
   }
   try:
       # Senden Sie eine HTTP-GET-Anfrage an die URL
       response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
       print(response.status_code)
       response.raise_for_status()
   except requests.exceptions.RequestException as e:
       print(f'Error fetching data: {e}')

   # Parsen des HTML-Inhalts mit lxml
   parser = html.fromstring(response.text)
   # Produkttitel extrahieren
   title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
   # Produktpreis extrahieren
   price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
   # Auszug aus der Überprüfung
   review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))

   # Extrahierte Details in einem Wörterbuch speichern
   product_detail = {
       'title': title,
       'price': price,
       'review_details': review_details
   }
   # Anhängen von Produktdetails an die Liste
   product_details.append(product_detail)

Titel:

1.png

Preis:

2.png

Überprüfung Detail:

3.png

Daten in CSV speichern

  1. Erstellen Sie eine neue Datei, geben Sie als Dateityp CSV an und stellen Sie den Schreibmodus ein.
  2. Geben Sie die Feldnamen (Spalten) der CSV-Datei an.
  3. Um Wörterbücher in die CSV-Datei zu schreiben, erstellen Sie ein csv.DictWriter-Objekt.
  4. Schreiben Sie die Kopfzeile der CSV-Datei.
  5. Für jedes Wörterbuch in product_details eine Schleife durchlaufen und das Wörterbuch als Zeile in die CSV-Datei schreiben.

with open('walmart_products.csv', 'w', newline='') as csvfile:
    fieldnames = ['title', 'price', 'review_details']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for product_detail in product_details:
        writer.writerow(product_detail)

Vollständiger Code

Beim Web Scraping von Walmart wird das komplette Python-Skript wie unten dargestellt aussehen. Hier finden Sie auch einige Kommentare, die Ihnen das Verständnis der einzelnen Abschnitte erleichtern sollen.


import requests
from lxml import html
import csv
import random
import urllib3
import ssl

ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()


# Liste der Produkt-URLs zum Abrufen von Walmart-Daten
product_urls = [
   'link with https',
   'link with https',
   'link with https'
]

# Zufallsgenerierte User-Agent-Strings für Anonymität
user_agents = [
   'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
   'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
   'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]

# Proxy-Liste für IP-Rotation
proxy = [
    '<ip>:<port>',
    '<ip>:<port>',
    '<ip>:<port>',
]


# Kopfzeilen zur Nachahmung von Browseranfragen
headers = {
   'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
   'accept-language': 'en-IN,en;q=0.9',
   'dnt': '1',
   'priority': 'u=0, i',
   'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
   'sec-ch-ua-mobile': '?0',
   'sec-ch-ua-platform': '"Linux"',
   'sec-fetch-dest': 'document',
   'sec-fetch-mode': 'navigate',
   'sec-fetch-site': 'none',
   'sec-fetch-user': '?1',
   'upgrade-insecure-requests': '1',
}

# Initialisierung einer leeren Liste zum Speichern von Produktdaten
product_details = []

# Schleife durch jede Produkt-URL
for url in product_urls:
   headers['user-agent'] = random.choice(user_agents)
   proxies = {
       'http': f'http://{random.choice(proxy)}',
       'https': f'http://{random.choice(proxy)}',
   }
   try:
       # Senden Sie eine HTTP-GET-Anfrage an die URL
       response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
       print(response.status_code)
       response.raise_for_status()
   except requests.exceptions.RequestException as e:
       print(f'Error fetching data: {e}')

   # Parsen des HTML-Inhalts mit lxml
   parser = html.fromstring(response.text)
   # Produkttitel extrahieren
   title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
   # Produktpreis extrahieren
   price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
   # Auszug aus der Überprüfung
   review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))

   # Extrahierte Details in einem Wörterbuch speichern
   product_detail = {
       'title': title,
       'price': price,
       'review_details': review_details
   }
   # Anhängen von Produktdetails an die Liste
   product_details.append(product_detail)

# Schreiben der extrahierten Daten in eine CSV-Datei
with open('walmart_products.csv', 'w', newline='') as csvfile:
   fieldnames = ['title', 'price', 'review_details']
   writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
   writer.writeheader()
   for product_detail in product_details:
       writer.writerow(product_detail)

Zusätzliche Vorschläge

Für diejenigen, die Python als Schnittstelle zur Walmart Scraping-API verwenden, ist es wichtig, robuste Methoden zu entwickeln, die effektiv Walmart-Preise und Walmart-Bewertungsergebnisse scrapen. Diese API bietet eine direkte Pipeline zu umfangreichen Produktdaten, die Echtzeit-Analysen zu Preisen und Kundenfeedback ermöglichen.

Die Anwendung dieser spezifischen Strategien verbessert die Präzision und den Umfang der gesammelten Informationen und ermöglicht es Unternehmen, sich schnell an Marktveränderungen und Verbrauchertrends anzupassen. Durch den strategischen Einsatz der Walmart-API in Python können Unternehmen ihre Datenerfassungsprozesse optimieren und so eine umfassende Marktanalyse und fundierte Entscheidungsfindung gewährleisten.

Schlussfolgerung

In diesem Tutorial haben wir erklärt, wie man die Python-Bibliotheken verwendet, um Walmart-Daten zu scrapen und sie in einer CSV-Datei zur späteren Analyse zu speichern. Das angegebene Skript ist einfach und dient als Ausgangspunkt, den Sie ändern können, um die Effizienz des Scraping-Prozesses zu verbessern. Zu den Verbesserungen gehören z. B. das Hinzufügen von zufälligen Zeitintervallen zwischen den Anfragen, um menschliches Browsing zu simulieren, die Verwendung von Benutzer-Agenten und Proxys, um den Bot zu maskieren, und die Implementierung einer erweiterten Fehlerbehandlung, um Unterbrechungen oder Fehler beim Scraping zu bewältigen.


Bemerkungen:

0 Bemerkungen