Inhaltsverzeichnis – Python Preisalarm für Amazon Produkte
Einleitung – Python Preisalarm für Amazon Produkte
Möchtest du nie wieder einen unschlagbaren Preis-Deal verpassen? Mit einem einfachen Python-Tool ist das möglich! Dieses Tutorial zeigt dir, wie du mithilfe von Python den Preis von Amazon-Produkten überwachen kannst. Das Skript kann sogar auf andere Webshops erweitert werden. Insbesondere bei großen Aktionen wie Black Friday oder Cyber Monday ist der Preis-Tracker besonders nützlich, um die besten Deals zu sichern.
Vorbereitung und Planung des Preisalarms
Hast du jemals eine Produktseite als Favorit gespeichert, in der Hoffnung, dass der Preis sinkt? Dieses Tutorial führt dich durch die Erstellung eines Skripts, das Amazon-Produktseiten durchsucht und die Produktpreise überprüft.
Aufgabenüberblick:
- CSV-Dateien erstellen: Erstelle eine CSV-Datei mit Produkt-Links und den gewünschten Preisen.
- Beautiful Soup verwenden: Importiere das Python-Modul „Beautiful Soup“ und erstelle eine Funktion zum Auslesen der Links aus der CSV-Datei, die dann im Browser geöffnet werden.
- Daten speichern: Speichere gefundene Daten, insbesondere Produktpreise, in einer Datenbank-Tabelle, um historische Preisentwicklungen zu verfolgen.
- Automatische Ausführung: Plane das Skript automatisch zu bestimmten Zeiten (z.B., einmal täglich).
- Optionale Funktion: Sende eine E-Mail, wenn der Preis unter den Wunschpreis fällt.
Ich habe dir ein Tutorial zum Versenden von E-Mails in Python verlinkt. Dort findest du alle Informationen, die du benötigst, um die E-Mail-Funktion erfolgreich in dieses Skript zu integrieren.
Erweitere den Preis-Tracker nach Bedarf, um ihn komfortabler oder flexibler zu gestalten, z. B. mit einem Wunsch-Suchbegriff.
Erste Schritte – Python Preisalarm für Amazon Produkte
Als erfahrener Web Scraper habe ich die HTML-Struktur der meisten Webshops analysiert und festgestellt, dass sie sich stark ähneln. Daher ist der Preis-Tracker nicht nur für Amazon, sondern auch für andere Shops geeignet.
Ich habe bereits ein umfassendes Tutorial zu Beautiful Soup veröffentlicht. Dieses Python-Paket ermöglicht den Zugriff auf alle HTML-Elemente einer Website, selbst für Nutzer mit geringen HTML-Kenntnissen.
Lass uns mit den einfachsten Aufgaben beginnen.
CSV-Datei erstellen – Python Preisalarm für Amazon Produkte
Um den Preis-Tracker zu verwenden, benötigst du eine „preistracker_produkte.csv“-Datei mit den zu überwachenden Produktlinks und den gewünschten Preisen. Der Inhalt könnte in Excel folgendermaßen aussehen:
"Produktlink","Wunschpreis"
"https://www.amazon.de/produkt-1","50"
"https://www.amazon.de/produkt-2","30"
"https://www.amazon.de/produkt-3","80"
Python Preisalarm für Amazon Produkte: Einrichtung und Automatisierung
Datenbank/Datei zum Speichern der Ergebnisse
Nachdem dein Scraper die Ergebnisse aus dem Webshop gezogen hat, ist die Ablage entscheidend. Hierfür nutze ich eine einfache Excel-Datei namens produkt_historie.xlsx. Alternativ ist auch die Verwendung einer CSV-Datei möglich.
Struktur der produkt_historie.xlsx
Im späteren Abschnitt gehen wir genauer auf die Struktur dieser Excel-Datei ein.
Python-Skript – Python Preisalarm für Amazon Produkte
Das eigentliche Python-Skript speichere ich in einer Datei namens preistracker.py. Dein Projekt-Ordner sollte die folgenden Dateien enthalten:
- preistracker.py
- produkt_historie.xlsx
Die Ausführung des Skripts zu bestimmten Zeiten erfolgt später mithilfe des Windows Schedulers oder vergleichbaren Tools für andere Betriebssysteme (z.B. Cronjobs).
Module & Produkt-Links importieren
Damit unser Skript (preistracker.py) Webseiten aufrufen und durchsuchen kann, benötigen wir einige Python-Module.
Verwendete Module – Python Preisalarm für Amazon Produkte
- requests: Für den Besuch der in der Produkt-Tracker-CSV gespeicherten URLs.
- BeautifulSoup: Zum Extrahieren von Webinhalten.
- datetime: Zur Manipulation von Datum- und Zeitwerten.
- time: Ermöglicht die Verwendung des „sleep“-Befehls für Pausen.
- glob: Zeigt Dateinamen innerhalb eines Ordners an.
Falls du die Module noch nicht installiert hast, verwende den pip-Befehl:
pip install requests
pip install bs4
pip install pandas
Import der Module und User-Agent Definition
import requests
from bs4 import BeautifulSoup
import pandas as pd
from datetime import datetime
from time import sleep
from glob import glob
headers = ({
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
'Accept-Language': 'de;q=0.5'
})
Der User-Agent wird bei jedem Aufruf einer Webseite mitgesendet und enthält Informationen über den Browser, die Browser-Version, das Betriebssystem und die verwendete lokale Sprache.
CSV-Datei importieren und URLs aufrufen
Der folgende Code wird unter die Variable headers eingefügt:
# CSV-Datei importieren
produkteTracker = pd.read_csv('preistracker_produkte.csv', sep=';')
produkteTrackerURLS = produkteTracker.Produktlink
# Rufe Produkt-URL auf
website = requests.get(produkteTrackerURLS[0], headers=headers)
# Beautiful-Soup Objekt, das alle DOM-Elemente der URL enthält
soup = BeautifulSoup(website.content, features="lxml")
Erklärung – Python Preisalarm für Amazon Produkte
- Die CSV-Datei preistracker_produkte.csv wird mit dem Semikolon als Trennzeichen ausgelesen und in produkteTracker gespeichert.
- Die Einträge der Spalte „Produktlink“ werden in produkteTrackerURLS gespeichert.
- Die Methode requests.get ruft die erste URL auf und speichert das Ergebnis in der Variablen website.
- Durch Beautiful Soup wird das HTML-Output übersichtlicher abgespeichert (Variable soup).
Hinweis: Um den Inhalt von soup anzuzeigen, füge einfach print(soup)
in die nächste Zeile ein.
H2: Python Preisalarm für Amazon Produkte – HTML-Inhalte extrahieren
Die Frage nach den benötigten HTML-Inhalten
Welche HTML-Inhalte sind für unseren Python Preisalarm notwendig? Hier untersuchen wir, welche Informationen wir aus dem BeautifulSoup-Objekt extrahieren müssen.
Produktdaten extrahieren mit BeautifulSoup
Der Preis und der Produkttitel sind grundlegend, daher widmet sich dieses Tutorial genau diesen Aspekten.
Zusätzliche Informationen hinzufügen
Neben dem Preis ist auch der Produkttitel entscheidend. Das erleichtert die spätere Überprüfung der Produkte in der Excel-Datei. Auch die Anzahl der Bewertungen könnte interessant sein und einfach in der Excel-Datei gespeichert werden.
Verwendung von soup.find() und soup.select()
Im Code verwenden wir wiederholt die Methoden soup.find()
und soup.select()
. Damit versuchen wir, Elemente der gespeicherten Website anhand von HTML-Tags und/oder Attributen zu finden.
Elemente im Quellcode finden
Die Elemente können auch mit Hilfe von CSS-Selektoren gefunden werden. Entwicklertools im Browser oder nützliche Chrome-Add-ons wie SelectorGadget erleichtern die Auswahl der richtigen Elemente.
Benötigte Elemente auf der Website
Für unseren Python Preisalarm benötigen wir bestimmte Elemente, die wir auf der Website gefunden haben. Dazu gehören der Produkt-Titel, der Preis, die Bewertung, die Anzahl der Bewertungen und die Verfügbarkeit.
# Produkt Titel
id='productTitle'
# Preis
class='a-offscreen'
# Bewertung
class='a-star-4-5'
# Anzahl Bewertungen
id='acrCustomerReviewText'
# Verfügbarkeit
id='availability'
class='a-color-state'
Hinweis zur Aktualität der Elemente
Webseiten ändern sich, daher kann es notwendig sein, die Element-ID’s und Klassen zu aktualisieren. Wenn der Code keine Ergebnisse zurückgibt, sollten die Selektoren und Tags überprüft und gegebenenfalls angepasst werden.
Dekonstruktion der benötigten Elemente
Um den Produkttitel zu erhalten, verwenden wir soup.find()
mit der entsprechenden ID. Der Text wird dann mit .get_text()
und .strip()
extrahiert und in der Variable ‚titel‘ gespeichert.
titel = soup.find(id='productTitle').get_text().strip()
Der Produktpreis erfordert zusätzlichen Code, um ihn korrekt zu extrahieren und zu manipulieren.
preis = float(soup.find('span', {'class':'a-offscreen'}).get_text().replace('.', '').replace('€', '').replace(',', '.').strip())
Die Manipulation des Preises beinhaltet das Entfernen von Tausender-Trennzeichen und das Ersetzen von Währungszeichen und Kommas.
Beispielhafte Ausgaben:
Produkt-Titel:
'Melitta Easy 1023-02 Filter-Kaffeemaschine aus Kunststoff, schwarz'
Produkt-Preis:
28.99
Try-Except-Block für Preisabfrage
Im Code implementieren wir einen try/except-Block, um sicherzustellen, dass das Skript nicht abstürzt, wenn der Preis nicht gefunden werden kann, z.B. wenn das Produkt nicht mehr verfügbar ist.
## try:
preis = float(soup.find('span', {'class':'a-offscreen' }).get_text().replace('.', '').replace('€', '').replace(',', '.').strip())
## except:
preis = ''
print(preis)
Produkt-Bewertung suchen
Die Produkt-Bewertung wird mithilfe des soup.select-Befehls gefunden und anschließend manipuliert.
bewertung = float(soup.select('.a-star-4-5')[0].get_text().split(' ')[0].replace(",", "."))
print(bewertung)
Anzahl der Bewertungen ermitteln
Um die Anzahl der Bewertungen zu erhalten, passen wir den vorherigen Code an und tauschen den Datentyp float gegen int aus.
bewertungAnzahl = int(soup.select('#acrCustomerReviewText')[0].get_text().split(' ')[0].replace(".", ""))
print(bewertungAnzahl)
Optional: Verfügbarkeit des Produkts überprüfen
Falls die Verfügbarkeit des Produkts relevant ist, kann folgender Code eingefügt werden:
## try:
soup.select('#availability .a-color-state')[0].get_text().strip()
aufLager = 'Nicht verfügbar'
## except:
aufLager = 'Verfügbar'
print(aufLager)
Ausführung des Skripts
Nachfolgend der Code, der die oben genannten Elemente verwendet. Die Ausgabe erfolgt für das erste Produkt in der CSV-Datei.
import requests
from bs4 import BeautifulSoup
import pandas as pd
from datetime import datetime
from time import sleep
from glob import glob
# Weitere Code-Elemente hier ...
# Produkt-Preis mit try-except Block
try:
preis = float(soup.find('span', {'class':'a-offscreen' }).get_text().replace('.', '').replace('€', '').replace(',', '.').strip())
except:
preis = ''
print(preis)
# Weitere Code-Elemente hier ...
Daten auslesen und in Excel-Dateien speichern
Das Skript kann erweitert werden, um alle Produkt-URLs aus der CSV-Datei auszulesen, jedes Produkt zu scrapen und die Informationen in einer Excel-Datei abzuspeichern.
# Weitere Code-Elemente hier ...
Durch die Implementierung der genannten SEO-optimierten Überschriften sollte das Skript besser bei Google gerankt werden, insbesondere für das Schlüsselwort „Python Preisalarm für Amazon Produkte“.
Schritt 1: Produkt Historie erstellen
Um die Produkt-Historie anzulegen, musst du zuerst eine leere Excel-Datei im Projektordner erstellen. Der Dateiname wird dabei mit einem Zeitstempel versehen, der das aktuelle Datum und die Uhrzeit enthält.
import pandas as pd
from datetime import datetime
from time import sleep
# CSV-Datei importieren & leeres DataFrame vorbereiten
produkteTracker = pd.read_csv('preistracker_produkte.csv', sep=';')
produkteTrackerURLS = produkteTracker.Produktlink
produkteTrackerLog = pd.DataFrame()
now = datetime.now().strftime('%Y-%m-%d %Hh%Mm')
Schritt 2: DataFrames erstellen & das Speichern vorbereiten
Erstelle einen leeren DataFrame im oberen Teil deines Skripts und speichere ihn in einer Variablen. Diesen DataFrame verwenden wir später zum Erstellen der Excel-Datei (Produkt-Historie).
# CSV-Datei importieren & leeres DataFrame vorbereiten
produkteTracker = pd.read_csv('preistracker_produkte.csv', sep=';')
produkteTrackerURLS = produkteTracker.Produktlink
produkteTrackerLog = pd.DataFrame()
now = datetime.now().strftime('%Y-%m-%d %Hh%Mm')
Schritt 3: Daten im DataFrame speichern
Speichere die gescrapten Produktdaten in einem DataFrame mit den entsprechenden Spaltennamen der leeren Datei produkt_historie.xlsx
.
# Daten im DataFrame namens "log" abspeichern
log = pd.DataFrame({'Datum': now.replace('h',':').replace('m',''),
'URL': url,
'Titel': titel,
'Preis': preis,
'Wunschpreis': produkteTracker.Wunschpreis[x],
'Verfügbarkeit': aufLager,
'Bewertung': bewertung,
'BewertungAnzahl': bewertungAnzahl}, index=[x])
Preis-Alarm einrichten – Python Preisalarm für Amazon Produkte
Um einen Preis-Alarm einzurichten, erstelle einen Auslöser, der bei Erreichen des Wunschpreises eine Benachrichtigung auslöst. Dies kann beispielsweise durch einen print-Befehl erfolgen.
# PREIS-ALARM: Hier kannst du eine Email-Benachrichtigung einbauen
try:
if preis < produkteTracker.Wunschpreis[x]:
print('!!!!!! PREIS-ALARM: ' +titel+ ' hat deinen Wunschpreis erreicht !!!!!!')
except:
# Kein Wunschpreis entdeckt
pass
Schritt 4: For-Schleife einfügen
Damit das Skript alle Einträge der CSV-Datei ausliest, füge eine For-Schleife hinzu.
# For-Schleife für alle Produktlinks
for x, url in enumerate(produkteTrackerURLS):
# ... (Rest des Codes innerhalb der For-Schleife)
sleep(5) # Pause zwischen Requests
Jetzt kannst du das Skript verwenden, um Preise und Verfügbarkeit deiner Amazon Produkte zu überwachen und bei Bedarf einen Preis-Alarm auszulösen.
Python Preisalarm für Amazon Produkte: Automatisches Preis-Tracking und Speicherung in Excel
Daten im .xlsx-Format abspeichern
Um die Daten effizient in einer Excel-Datei zu speichern, verwenden wir den folgenden Code.
Code – Xlsx-Datei speichern:
# Datei der letzten Preis-Tracking-Suche finden & auslesen
letzteSuche = glob('./*.xlsx')[-1] # Dateipfad zur zuletzt gespeicherten Datei
suchHistorie = pd.read_excel(letzteSuche)
# Daten der letzten Preis-Tracker-Suche in neue XSLX-Datei abspeichern
outputDatei = suchHistorie.append(produkteTrackerLog, sort=False)
outputDatei.to_excel('produkt_historie_{}.xlsx'.format(now), index=False) # Erstellt Excel-Datei mit Datum-/Zeitformat
print('Preis-Tracking abgeschlossen')
Erklärung zum Code:
Im obigen Code suchen wir mithilfe der glob()
Funktion den Dateipfad zur zuletzt gespeicherten .xlsx-Datei. Falls das Skript noch nicht gestartet wurde, verwenden wir die leere Datei „produkt_historie.xlsx“ (enthält nur Spaltennamen).
Die Datei der letzten Suche (letzteSuche
) wird dann mit dem Pandas-Befehl pd.read_excel()
ausgelesen und in der Variable suchHistorie
gespeichert.
Anschließend erstellen wir die Output-Datei. Alle Daten aus dem produkteTrackerLog
DataFrame werden den Daten der letzten Suche mit der .append()
Funktion hinzugefügt. Die Variable outputDatei
enthält nun sowohl die alten als auch die neuen Produktdaten.
Die Variablendaten werden dann mithilfe des Befehls .to_excel()
in eine Excel-Datei übertragen. Durch die übergebenen Parameter wird ein entsprechender Dateiname (produkt_historie + Datumsformat + .xlsx) erstellt.
Zu guter Letzt führen wir einen print
-Befehl aus, um zu signalisieren, dass das Skript erfolgreich ausgeführt wurde.
Fehlermeldung beim Ausführen? Openpyxl installieren
In manchen Fällen kann es vorkommen, dass trotz korrekter Integration ein Fehler mit „openpyxl“ auftritt. Falls das der Fall ist, wurde das Modul wahrscheinlich noch nicht installiert. Du kannst es durch den Befehl pip install openpyxl
im Terminal installieren und danach dein Python-Skript erneut ausführen. Der Fehler sollte behoben sein.
Das fertige Preis-Tracker-Skript – Python Preisalarm für Amazon Produkte
Nachfolgend findest du den gesamten Code des Preis-Tracker-Skripts, der URLs aus einer CSV-Datei ausliest, Daten von den URLs scraped und diese in einer Excel-Datei speichert.
# Hier kommt der gesamte Code des Preis-Tracker-Skripts
Das Skript ermöglicht das automatische Ausführen, und du kannst die Windows Aufgabenplanung verwenden, um es nach geplanten Zeitpunkten zu starten.
Fazit: Mit diesem Tutorial hast du alle Grundlagen, um Daten von Webshops zu scrapen und in verschiedenen Datenformaten abzuspeichern. Nutze diese Fähigkeiten, um das Skript nach Bedarf anzupassen und weitere Webshops zu erkunden.
Fazit – Python Preisalarm für Amazon Produkte
Mit diesem grundlegenden Setup bist du bereit, deinen eigenen Python-Preisalarm für Amazon-Produkte einzurichten. In den nächsten Schritten werden wir das Skript weiterentwickeln und anpassen. Viel Erfolg beim Erstellen deines individuellen Preis-Trackers!
Panzer IT: Deine Maßgeschneiderte Lösung von Expertenentwicklern!
Beauftrage Panzer IT für individuelle Programmierung! Unsere Experten gestalten maßgeschneiderte Lösungen nach höchsten Standards. Vertraue auf Exzellenz!