Wenn Sie auf eine Produkt-URL (z. B. https://www.amazon.com/Robux-Roblox-Online-Game-Code/dp/B07RZ74VLR/) klicken, gelangen Sie zu einer Fundgrube detaillierter Informationen. Um zu sehen, wie diese Informationen strukturiert sind, können Sie einen modernen Browser wie Chrome verwenden.
HTML-Elemente untersuchen
Klicken Sie mit der rechten Maustaste auf den Produkttitel und wählen Sie „Untersuchen“. Sie werden feststellen, dass das HTML-Markup des Produkttitels hervorgehoben ist. Es ist insbesondere in einem span-Tag enthalten, und sein id-Attribut ist als „productTitle“ definiert.
Mit derselben Methode können Sie das Markup anderer wichtiger Elemente finden:
- Preis: Klicken Sie mit der rechten Maustaste auf den Preis und wählen Sie „Untersuchen“. Der Dollar-Teil des Preises befindet sich in einem span-Tag mit der Klasse „a-price-whole“, während die Cent-Beträge in einem anderen span-Tag gespeichert sind, der mit der Klasse „a-price-fraction“ gekennzeichnet ist.
- Bewertung, Bild und Beschreibung: Nutzen Sie dieselbe Inspektionsfunktion, um diese wesentlichen Komponenten zu finden, die jeweils in spezifischen Tags und Klassen eingeschlossen sind.
Der Prozess des Scrapings von Produktdaten von Amazon lässt sich in konkrete Schritte unterteilen, die jeweils auf einen bestimmten Aspekt der Produktinformationen abzielen. Durch den Einsatz von Python-Bibliotheken wie requests und BeautifulSoup können wir auf die gewünschten Details zugreifen, sie lokalisieren und scrapen. Hier ist eine detaillierte Anleitung zur Vorgehensweise:
1. Starten Sie die Anfrage
Beginnen Sie damit, eine GET-Anfrage mit benutzerdefinierten Headern an die URL der Produktseite zu senden:
response = requests.get(url, headers=custom_headers)
soup = BeautifulSoup(response.text, 'lxml')
Wir verwenden BeautifulSoup, um den HTML-Inhalt zu analysieren, was die Abfrage spezifischer Informationen über CSS-Selektoren erleichtert. 2. Produktnamen lokalisieren und extrahieren
Identifizieren Sie den Produkttitel anhand der eindeutigen ID „productTitle“ innerhalb eines span-Elements:
title_element = soup.select_one('#productTitle')
title = title_element.text.strip()
3. Produktbewertung lokalisieren und extrahieren
Um die Produktbewertung zu extrahieren, müssen Sie auf das title-Attribut des #acrPopover-Selektors zugreifen:
rating_element = soup.select_one('#acrPopover')
rating_text = rating_element.attrs.get('title')
rating = rating_text.replace('out of 5 stars', '')
4. Produktpreis finden und auslesen
Extrahieren Sie den Produktpreis mithilfe des Selektors #price_inside_buybox:
price_element = soup.select_one('#price_inside_buybox')
print(price_element.text)
5. Produktbild suchen und extrahieren
Rufen Sie die Standard-Bild-URL mithilfe des Selektors #landingImage ab:
image_element = soup.select_one('#landingImage')
image = image_element.attrs.get('src')
6. Produktbeschreibung finden und auslesen
Rufen Sie die Produktbeschreibung mithilfe des Selektors #productDescription ab:
description_element = soup.select_one('#productDescription')
print(description_element.text)
7. Produktbewertungen finden und scrapen
Das Auslesen von Bewertungen ist komplexer, da ein Produkt mehrere Bewertungen haben kann. Eine einzelne Bewertung kann verschiedene Informationen wie Autor, Bewertung, Titel, Inhalt, Datum und Verifizierungsstatus enthalten.
Bewertungen sammeln
Verwenden Sie den Selektor `div.review`, um alle Bewertungen zu identifizieren und zu sammeln:
review_elements = soup.select("div.review")
scraped_reviews = []
for review in review_elements:
# Extracting specific review details...
Bewertungsdetails extrahieren
Jede Bewertung lässt sich in spezifische Details zerlegen:
- Autor: span.a-profile-name
- Bewertung: i.review-rating
- Titel: a.review-title > span:not([class])
- Inhalt: span.review-text
- Datum: span.review-date
- Verifizierter Status: span.a-size-mini
Jedes dieser Elemente kann mithilfe der entsprechenden CSS-Selektoren ausgewählt und dann mit ähnlichen Methoden wie in den vorherigen Schritten extrahiert werden.
Zusammenstellen der Bewertungsdaten
Erstellen Sie ein Objekt, das die extrahierten Bewertungsdetails enthält, und fügen Sie es dem Array der Bewertungen hinzu:
r = {
"author": r_author,
"rating": r_rating,
"title": r_title,
"content": r_content,
"date": r_date,
"verified": r_verified
}
scraped_reviews.append(r)
Das Scraping von Amazon-Produktdaten ist eine vielschichtige Aufgabe, die einen präzisen Ansatz erfordert, um bestimmte Elemente innerhalb der Struktur der Webseite anzusprechen. Durch die Nutzung der Möglichkeiten moderner Web-Scraping-Tools ist es möglich, detaillierte Produktinformationen erfolgreich zu extrahieren.
Umgang mit Produktlisten
Um detaillierte Produktinformationen zu scrapen, beginnt man oft bei einer Produktliste oder einer Kategorieseite, auf der Produkte in einer Raster- oder Listenansicht angezeigt werden.
Produktlinks identifizieren
Auf einer Kategorieseite fällt Ihnen möglicherweise auf, dass jedes Produkt in einem div-Element mit einem bestimmten Attribut [data-asin] enthalten ist. Die Links zu einzelnen Produkten befinden sich oft innerhalb eines h2-Tags in diesem div-Element.
Der entsprechende CSS-Selektor für diese Links wäre:
[data-asin] h2 a
Links analysieren und verfolgen
Sie können BeautifulSoup verwenden, um diese Links auszuwählen und die href-Attribute zu extrahieren. Beachten Sie, dass diese Links relativ sein können; daher sollten Sie die urljoin-Methode verwenden, um sie in absolute URLs umzuwandeln.
from urllib.parse import urljoin
def parse_listing(listing_url):
# Your code to fetch and parse the page goes here...
link_elements = soup_search.select("[data-asin] h2 a")
page_data = []
for link in link_elements:
full_url = urljoin(listing_url, link.attrs.get("href"))
product_info = get_product_info(full_url)
page_data.append(product_info)
Umgang mit Paginierung
Viele Listenseiten sind paginiert. Sie können zur nächsten Seite navigieren, indem Sie den Link suchen, der den Text „Weiter“ enthält.
next_page_el = soup.select_one('a:contains("Next")')
if next_page_el:
next_page_url = next_page_el.attrs.get('href')
next_page_url = urljoin(listing_url, next_page_url)
Anschließend kannst du diese URL verwenden, um die nächste Seite zu parsen, und die Schleife so lange fortsetzen, bis keine „Weiter“-Links mehr vorhanden sind.
8. Exportieren der gescrapten Produktdaten in eine JSON-Datei
Die gescrapten Produktdaten werden als Wörterbücher innerhalb einer Liste gesammelt. Dieses Format ermöglicht eine einfache Konvertierung in einen Pandas-DataFrame, was die Datenbearbeitung und den Export erleichtert.
So können Sie aus den gescrapten Daten einen DataFrame erstellen und diesen als JSON-Datei speichern:
import pandas as pd
df = pd.DataFrame(page_data)
df.to_json('baby.json', orient='records')
Dadurch wird eine JSON-Datei erstellt, die alle gescrapten Produktinformationen enthält.
Dieser Leitfaden bietet eine Schritt-für-Schritt-Anleitung zum Scrapen von Produktlisten, einschließlich der Navigation durch die Paginierung und des Exports der Ergebnisse in eine JSON-Datei. Es ist wichtig, diese Methoden an die spezifische Struktur und die Anforderungen der Website anzupassen, die Sie scrapen.