Scraping amazon product data with python

Ganz gleich, ob Sie an einer eigenen Idee oder an einem Unternehmensprojekt arbeiten: Daten sind unverzichtbar. Wenn Sie ein neues Projekt starten oder eine Strategie für ein bestehendes Unternehmen entwickeln, müssen Sie große Datenmengen analysieren. Diese Analyse hilft dabei, abhängig vom Datensatz und von der Problemstellung auf unterschiedliche Weise Lösungen zu entwickeln. Hier kommt Web Scraping ins Spiel.

Der stärkere Fokus auf die Analyse des Kundenverhaltens führt dazu, dass immer mehr Einzelhandelsunternehmen Web-Scraping-Techniken, insbesondere die Datenextraktion, einsetzen. Zu den wichtigen Maßnahmen, die jedes Unternehmen umsetzen sollte, gehört die Beobachtung von Preisen der Wettbewerber, Produktverfügbarkeit und Kundenbewertungen. 

In diesem Tutorial zeigen wir, wie Sie mit Python Web Scraping starten, um Produktdaten auf Amazon besser zu analysieren.

Amazon python

Ersteinrichtung: Was muss heruntergeladen werden?

Bevor wir mit Python Amazon-Seiten per Web Scraping auslesen, stellen wir sicher, dass Ihre Umgebung korrekt eingerichtet ist. Falls Python 3.x noch nicht auf Ihrem Computer installiert ist, können Sie es unter https://www.python.org/

  • Visual Studio Code (VS Code)

Um alle erforderlichen Befehle auszuführen, können Sie das Terminal in Visual Studio Code (VS Code) verwenden. Laden Sie VS Code einfach von der offiziellen Website herunter und folgen Sie den Installationsanweisungen für Ihr Betriebssystem.

So richten Sie Ihre Python-Umgebung ein:

  • Open VS Code und installieren Sie die Python-Erweiterung, indem Sie in der Seitenleiste auf das quadratische Symbol klicken. 
Visual code
  • Öffnen Sie ein Terminal in VS Code, indem Sie im Menü Terminal – Neues Terminal auswählen. 
  • Prüfen Sie mit einem dieser Befehle, ob Python installiert ist:

python --version
      
        

      


python3 --version
      
        

      

Product

Eine Anfrage an die Produktseite senden

*Bevor wir eine Anfrage senden, müssen wir außerdem die zuvor installierten Bibliotheken importieren:

Falls Python nicht installiert ist, wird python nicht gefunden. Wenn alles funktioniert, sehen Sie die aktuelle Version wie unten dargestellt.

Version python

Einen neuen Projektordner erstellen:

  • Öffnen Sie in VS Code über Datei – Ordner öffnen den Ordner, in dem Sie Ihr Projekt erstellen möchten. Erstellen Sie eine neue Python-Datei für Ihr Skript, zum Beispiel amazon_scraper.py
Amazon scraper
Amazon scraper2

Zwei Drittanbieter-Bibliotheken für Python installieren

Für diesen Schritt müssen wir pip. Pip, auch bekannt als pip3, ist ein Paketverwaltungssystem für Python, mit dem Softwarepakete installiert und verwaltet werden.

  • Sobald das Terminal geöffnet ist, können Sie die erforderlichen Bibliotheken mit pip, dem Paketinstallationsprogramm für Python, installieren. Prüfen Sie daher, ob Sie pip bereits installiert haben: 
Pip version

*Um pip zu installieren, können Sie Ensurepip verwenden. Geben Sie einen dieser Befehle im Terminal:


python -m ensurepip
      
        

      


python3 -m ensurepip
      
        

      

  • Verwenden Sie jetzt pip zum Installieren der erforderlichen Bibliotheken. Wir benötigen “requests”, “beautifulsoup4”, “pandas”, “lxml” und “html5lib”.  

pip3 install requests
pip3 install beautifulsoup4
pip3 install pandas
pip3 install lxml
pip3 install html5lib






Terminal

Warum benötigen wir diese Bibliotheken?

    1. Requests: Mit dieser Bibliothek können wir HTTP-Verbindungen zur Amazon-Seite herstellen. Sie hilft uns, den unverarbeiteten HTML-Inhalt von der Zielseite zu extrahieren.
    2. Beautiful Soup: Dieses leistungsstarke Werkzeug hilft uns, mit der Requests-Bibliothek die benötigten Daten aus dem unverarbeiteten HTML zu extrahieren.
    3. Pandas: wird für die Datenmanipulation und -analyse verwendet. Sie können extrahierte Daten zur effizienten Analyse in DataFrames organisieren und in verschiedene Formate wie CSV exportieren.
    4. lxml: eine leistungsstarke Bibliothek zum schnellen Parsen von XML und HTML Dokumenten. 
    5. html5lib: eine reine Python-Bibliothek zum Parsen von HTML, die der HTML5-Spezifikation folgt.

ProduktElemente extrahieren

Beginnen wir mit dem Hauptprozess. Von allen Informationen auf der Amazon-Seite konzentrieren wir uns auf das Extrahieren dieser Elemente:

  1. Name des Produkts;
  2. Bewertung;
  3. Preis;
  4. Bilder;
  5. Beschreibung.

Für dieses Tutorial haben wir dieses Produkt ausgewählt:  https://www.amazon.com/Apple-2023-MacBook-512GB-Storage/dp/B0CB9BWMPY

Product
Eine Anfrage an die Produktseite senden

*Bevor wir eine Anfrage senden, müssen wir außerdem die zuvor installierten Bibliotheken importieren:


import requests
from bs4 import BeautifulSoup
import pandas as pd





In diesem Schritt senden wir eine HTTP-Anfrage an die URL der Amazon-Produktseite, um deren HTML-Inhalt abzurufen. Mit der Bibliothek Requests können Sie die Anfrage eines Webbrowsers zum Aufrufen der Webseite simulieren. Fügen Sie passende Header wie User-Agent hinzu, um einen echten Browser nachzuahmen und Verbindungsfehler zu vermeiden. Die Serverantwort mit dem HTML-Inhalt der Seite wird anschließend für die weitere Verarbeitung und Datenextraktion gespeichert.


import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://www.amazon.com/Apple-2023-MacBook-512GB-Storage/dp/B0CB9BWMPY'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Accept-Language': 'en-US, en;q=0.5'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'lxml')













Produktname 

  • Fundstelle

Wenn wir den Titel untersuchen, sehen wir, dass sich der Titeltext innerhalb des h1-Tag mit der id title. Kehren wir zu unserer Datei zurück und schreiben den Code, um diese Information von Amazon zu extrahieren.

Product name
  • Produktnamen extrahieren

Wir extrahieren den Produktnamen aus dem HTML-Inhalt der Amazon-Produktseite. Mit der Bibliothek BeautifulSoup parsen wir den HTML-Inhalt und ermitteln anhand seines HTML-Tags und seiner Attribute das Element mit dem Produktnamen. Sobald das Element gefunden ist, extrahieren wir den Textinhalt, häufig mit Methoden wie find() oder find_all() zusammen mit CSS-Selektoren oder XPath-Ausdrücken. Abschließend wird der extrahierte Produktname vor dem nächsten Schritt nach Bedarf formatiert.

*Mit dem Attribut text können wir Informationen aus dem Text extrahieren.


product_name_element = soup.find('span', {'id': 'productTitle'})
product_name = product_name_element.text.strip()
print('Product Name:', product_name)





Nach dem Ausführen dieses Codes erhalten wir im Terminal:

Name result

Produktbilder

  • Fundstelle

Um Produktbilder von der Amazon-Produktseite zu extrahieren, müssen Sie die HTML-Elemente finden, die die Bild-URLs enthalten. Auf Amazon-Produktseiten werden Bilder häufig in img -Tags. Eine häufig verwendete Klasse für dynamische Bilder auf Amazon ist a-dynamic-image.

Product image
  • Produktbilder extrahieren

Use BeautifulSoup zum Parsen des mit der Anfrage abgerufenen HTML-Inhalts. Extrahieren Sie das Attribut src -Attribut aus jedem img -Tag, das die URL des Bildes enthält. 


image_tags = soup.find_all('img', {'class':'a-dynamic-image'})
product_images = [img['src'] for img in image_tags]
print('Product Images:', product_images)





*Manchmal kann es nach der Eingabe dieses Codes zu Problemen beim Erzielen der gewünschten Ergebnisse kommen. Wenn 0 Bilder angezeigt werden, untersuchen Sie besser die HTML-Struktur und stellen Sie sicher, dass Sie die richtige Klasse und das richtige Attribut gefunden haben. In solchen Fällen können Sie diesen Code ausprobieren:


if response.status_code == 200:
    soup = BeautifulSoup(response.content, 'html.parser')
    image_tags = soup.find_all('img')
    product_images = []
    for img_tag in image_tags:
     image_url = img_tag.get('src')
      if image_url:
         product_images.append(image_url)

    print('Product Images:', product_images)
else:
    print(f"Request failed with status code: {response.status_code}")














Dadurch werden alle hochauflösenden Bilder des Produkts in einer Liste zurückgegeben. 

Image result

* Amazon-Produktseiten enthalten häufig mehrere Bilder eines Produkts. Erfassen Sie alle relevanten Bilder, indem Sie alle Elemente der Liste verarbeiten.

Produktbewertung

  • Fundstelle

Sie finden die Bewertung im ersten i-Tag mit der Klasse a-icon-alt.

Product rating

*Passen Sie den Klassennamen unbedingt an die konkrete HTML-Struktur der Amazon-Produktseite an, die Sie extrahieren. Falls der Klassenname abweicht, müssen Sie a-icon-alt durch den richtigen Klassennamen ersetzen.

  • Produktbewertung extrahieren

Zum Extrahieren der Produktbewertung suchen Sie auf der Amazon-Produktseite anhand ihres Attributs class -Attribut, beispielsweise ‘a-icon-alt. Sobald es gefunden ist, rufen Sie den Textinhalt des Elements ab, der den Bewertungswert darstellt, und bereinigen ihn für die weitere Verarbeitung.


product_rating = soup.find('span', {'class': 'a-icon-alt'}).text.strip()
print('Product Rating:', product_rating)
      




Sie sehen dieses Ergebnis:

Rating result

Produktpreis

  • Fundstelle

Zum Extrahieren des Produktpreises ermitteln wir das HTML-Element, das den Preis anzeigt, genauer gesagt das direkt unter der Bewertung. Auf der Amazon-Produktseite befindet sich dieser Preis üblicherweise in einem span Tag mit der Klasse a-price. Sobald Sie dieses gefunden haben span -Tag gefunden haben, können Sie zu seinem ersten span -Tag wechseln, um den tatsächlichen Preiswert abzurufen. 

Product price
  • Produktpreis extrahieren

In diesem Code speichert die Variable price container das span Element mit der Klasse a-price, und der Preis ruft den Text seines ersten span Tag mit der Klasse a-offscreen, ab, das den Preis enthält. 


product_price = soup.find('span', {'class': 'a-offscreen'}).text.strip()
print('Product Price:', product_price)
      
        

      

Das Ergebnis lautet: 

Price result

Produktbeschreibung

  • Fundstelle

Um die Produktbeschreibung von der Amazon-Produktseite zu extrahieren, müssen Sie die HTML-Elemente finden, die die Beschreibung enthalten. Amazon-Produktbeschreibungen befinden sich häufig in einem bestimmten div oder span Tag mit der id productDescription. Falls das betreffende div nicht gefunden wird, prüft der Code die ul mit der Klasse a-unordered-list a-vertical a-spacing-mini auf Aufzählungsbeschreibungen.

 *Die Details der Beschreibung werden in den tr -Tags mit der Klasse a-spacing-small. Sobald Sie diese gefunden haben, müssen Sie beide darin enthaltenen span -Elemente finden, um den Text zu erhalten.

Product description
  • Produktbeschreibung extrahieren

Mit diesem Skript sollten Sie die Produktbeschreibung aus dem Bereich feature-bullets der Amazon-Produktseite extrahieren können. Dies ist ein üblicher Bereich mit Aufzählungspunkten, die die Produktmerkmale beschreiben.


description_section = soup.find('div', {'id': 'feature-bullets'})
product_description = description_section.get_text(separator=' ').strip()
print('Product Description:', product_description)





Sie erhalten Folgendes: 

Descr result

Nach dem Extrahieren aller benötigten Informationen können Sie die Daten in einem Dictionary speichern. Anschließend können Sie dieses Dictionary in einen pandas DataFrame für eine einfachere Datenbearbeitung und Anzeige.


product_info = {
   'Name': product_name,
   'Rating': product_rating,
   'Price': product_price,
   'Images': product_images,
   'Description': product_description
}


df = pd.DataFrame([product_info])
print(df)













Vollständiger Code

Sie können den Code leicht anpassen, um weitere Daten von der Amazon-Produktseite zu sammeln, etwa Kundenbewertungen, Produktdetails oder Verkäuferinformationen. Durch das Prüfen der HTML-Struktur können Sie den Code anpassen, um diese zusätzlichen Elemente zu extrahieren. Das kann für die private Nutzung oder für die Einbindung in eine App nützlich sein, die Amazon-Preise verfolgt und Nutzern hilft, die besten Angebote zu finden.

Der Code sieht zunächst so aus. Mit diesem Schritt-für-Schritt-Tutorial können Sie nachvollziehen, wie jeder Teil des Codes funktioniert, und weitere Änderungen für Ihre spezifischen Anforderungen vornehmen.


import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://www.amazon.com/Apple-2023-MacBook-512GB-Storage/dp/B0CB9BWMPY'

headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
   'Accept-Language': 'en-US, en;q=0.5'
}

response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'lxml')

product_name_element = soup.find('span', {'id': 'productTitle'})
product_name = product_name_element.text.strip()
print('Product Name:', product_name)

if response.status_code == 200:
   soup = BeautifulSoup(response.content, 'html.parser')
   image_tags = soup.find_all('img')
   product_images = []

   for img_tag in image_tags:
       image_url = img_tag.get('src')
       if image_url:
         
           product_images.append(image_url)

   print('Product Images:', product_images)
else:
   print(f"Request failed with status code: {response.status_code}")

product_rating = soup.find('span', {'class': 'a-icon-alt'}).text.strip()
print('Product Rating:', product_rating)

product_price = soup.find('span', {'class': 'a-offscreen'}).text.strip()
print('Product Price:', product_price)

image_tags = soup.find_all('img', {'class': 'a-dynamic-image'})
product_images = [img['src'] for img in image_tags]
print('Product Images:', product_images)

description_section = soup.find('div', {'id': 'feature-bullets'})
product_description = description_section.get_text(separator=' ').strip()
print('Product Description:', product_description)

product_info = {
   'Name': product_name,
   'Rating': product_rating,
   'Price': product_price,
   'Images': product_images,
   'Description': product_description
}

df = pd.DataFrame([product_info])
print(df)



























































Beim Ausführen des Skripts wird das Tabellenformat in Ihrer Python-Konsole oder im Terminal angezeigt. Nach dem Ausführen wird der DataFrame direkt im Terminal ausgegeben, wo Sie die Daten in Zeilen und Spalten organisiert sehen.

Result final

Tipps zum Extrahieren von Amazon-Seiten mit Python:

  1. Beachten Sie die Nutzungsbedingungen von Amazon;
  2. Parsen Sie HTML sorgfältig und führen Sie Sicherheitsprüfungen durch;
  3. Aktualisieren Sie Ihren Code regelmäßig, da sich die Struktur von Amazon-Seiten ändern kann;
  4. Verwenden Sie geeignete Header wie User-Agent und Accept-Language;
  5. Verwenden Sie Proxies und IP-Rotation.

Testen Sie DataImpulse für das Extrahieren von Amazon-Daten

Bei der Verwendung von Proxies senden Sie Anfragen von unterschiedlichen IPs, als kämen sie von verschiedenen Geräten, Standorten und Zeitzonen. Websites werden Sie nicht verdächtigen, Sie nicht zur Eingabe eines Captchas auffordern oder sogar sperren. Bei uns erhalten Sie:

  • Aktuelle Daten;
  • IP-Rotation, keine IPs auf Sperrlisten;
  • Behebung von Verifizierungsproblemen;
  • Intuitive APIs, die sich schnell an Änderungen der HTML-Struktur von Amazon anpassen;
  • Leistungsstarke Infrastruktur, ideal für große Scraping-Projekte;
  • Persönlicher Support rund um die Uhr.

Kontaktieren Sie uns unter [email protected] oder klicken Sie oben rechts auf die Schaltfläche “Jetzt testen“.

*Dieses Tutorial dient ausschließlich Bildungszwecken und demonstriert technische Möglichkeiten. Bitte beachten Sie, dass das Extrahieren von Daten von Amazon Fragen zu Nutzungsbedingungen und Rechtmäßigkeit aufwirft. Nicht autorisiertes Scraping kann schwerwiegende Folgen haben, darunter rechtliche Schritte und die Sperrung von Konten. Gehen Sie stets vorsichtig vor und beachten Sie ethische Richtlinien.

Share article: