Zum Inhalt

Der ultimative Leitfaden zum Scraping von Amazon mit Python (2023)

Das Auslesen von Daten von Amazon, einer der größten E-Commerce-Plattformen, kann wertvolle Erkenntnisse liefern. Ob Sie Preise vergleichen, Kundenrezensionen analysieren oder die Produktverfügbarkeit verfolgen möchten, Web Scraping kann ein nützliches Tool sein. Dieses Handbuch enthält detaillierte Anweisungen und Python-Codebeispiele für das Scraping von Amazon.

Web-Scraping-Ethik

Bevor wir näher darauf eingehen, ist es wichtig zu beachten, dass Scraping verantwortungsbewusst durchgeführt werden sollte, um die Belastung der Server der Website zu minimieren. Eine Möglichkeit hierfür besteht darin, sich auf die Amazon-Suchseite zu konzentrieren, wo Sie grundlegende Produktdaten wie Name, Preis, Bild-URL, Bewertung und Anzahl der Rezensionen extrahieren können. Durch diesen Ansatz wird die Anzahl der Anfragen, die Sie an Amazon richten müssen, erheblich reduziert, sodass Ihr Scraper schneller und kostengünstiger läuft.

Python Web Scraping-Bibliotheken

Python bietet eine Vielzahl von Bibliotheken für das Web-Scraping. Die Auswahl der richtigen hängt von Ihren spezifischen Anforderungen und Ihrem Komfort mit Python ab. Hier sind einige der am häufigsten verwendeten Bibliotheken:

  1. Anfragen: Eine beliebte Python-Bibliothek zum Senden von HTTP-Anfragen. Es abstrahiert die Komplexität des Sendens von Anfragen hinter einer einfachen API und ermöglicht Ihnen das Senden von HTTP/1.1-Anfragen mit verschiedenen Methoden wie GET, POST und anderen.
  2. BeautifulSuppe: Wird zum Parsen von HTML- und XML-Dokumenten und zum Extrahieren von Daten verwendet. Es erstellt einen Analysebaum aus dem Quellcode der Seite, der zum Extrahieren von Daten auf hierarchische und besser lesbare Weise verwendet werden kann.
  3. Scrapy: Ein Open-Source-Python-Framework, das speziell für Web-Scraping entwickelt wurde. Es handelt sich um ein vielseitiges Framework, das ein breites Spektrum an Scraping-Aufgaben bewältigen kann und in der Lage ist, große Datensätze zu scrapen.
  4. Selenium: Ein leistungsstarkes Tool zur Steuerung eines Webbrowsers über das Programm. Es ist sehr praktisch für das Web-Scraping, da es alle Arten von Website-Inhalten verarbeiten kann, einschließlich JavaScript-generierter Inhalte. Es ermöglicht auch Benutzerinteraktionen wie Klicken, Scrollen usw.
  5. Paket: Wird zum Extrahieren von Daten aus HTML und XML mithilfe von XPath- und CSS-Selektoren verwendet. Es basiert auf der lxml-Bibliothek und ist dadurch flexibel und benutzerfreundlich.

Scraping von Produktdaten von Amazon-Suchseiten

Der erste Schritt beim Scraping von Amazon besteht darin, Daten aus den Suchseiten zu extrahieren. Für diese Aufgabe können die Bibliotheken Python Requests und Parsel verwendet werden. Hier ist ein Beispielskript, das Produktdaten von allen verfügbaren Amazon-Suchseiten für ein bestimmtes Schlüsselwort (z. B. „iPad“) extrahiert:

Importanfragen von parsel import Selector von urllib.parse import urljoin keyword_list = ['ipad'] product_overview_data = [] für Schlüsselwort in keyword_list: url_list = [f'https://www.amazon.com/s?k={keyword} &page=1'] für URL in URL-Liste: Versuchen Sie: Antwort = Anfragen.get(URL) Wenn Antwort.status_code == 200: Sel = Selector(text=response.text) # Produktseite extrahieren search_products = sel.css("div .s-result-item[data-component-type=s-search-result]") für Produkt in search_products: relative_url = product.css("h2>a::attr(href)").get() asin = relative_url.split('/')[3] if len(relative_url.split('/')) >= 4 sonst Keine product_url = urljoin('https://www.amazon.com/', relative_url).split( "?")[0] product_overview_data.append( { "keyword": keyword, "asin": asin, "url": product_url, "ad": True if "/slredirect/" in product_url else False, "title": product.css("h2>a>span::text").get(), "price-data-a-size=xl .a-offscreen::text").get(), "real_price": Produkt. css(".a-price[data-a-size=b] .a-offscreen::text").get(), "rating": (product.css("span[aria-label~=stars]: :attr "rating_count": product.css("span[aria-label~=stars] + span::attr(aria-label)").get(), "thumbnail_url": product.xpath("//img[ has-class('s-image')]/@src").get(), } ) # Alle Seiten abrufen, wenn "&page=1" in URL: available_pages = sel.xpath( '//a[has-class ("s-pagination-item")][not(has-class("s-pagination-separator"))]/text()' ).getall() für Seite in available_pages: search_url_paginated = f'https:// www.amazon.com/s?k={keyword}&page={page}' url_list.append(search_url_paginated) außer Ausnahme als e: print("Fehler", e)

Dieses Skript sammelt eine Reihe von Produktdaten, die jeweils als Wörterbuch mit den folgenden Schlüsseln dargestellt werden:

  • keyword: Das verwendete Suchwort (z. B. „iPad“)
  • asin: Die eindeutige Amazon-Standard-Identifikationsnummer des Produkts
  • url: Die URL des Produkts
  • ad: Ein boolescher Wert, der angibt, ob es sich bei dem Produkt um eine Anzeige handelt
  • title: Der Titel des Produkts
  • price: Der Preis des Produkts
  • real_price: Der Originalpreis des Produkts vor etwaigen Rabatten
  • rating: Die Bewertung des Produkts
  • rating_count: Die Anzahl der Bewertungen, die das Produkt erhalten hat
  • thumbnail_url: Die URL des Miniaturbilds des Produkts

Das Skript identifiziert außerdem alle verfügbaren Seiten für das Suchwort und hängt sie an das an url_list zum Schaben【9†Quelle】.

Scraping von Produktdaten von Amazon-Produktseiten

Sobald Sie eine Liste der Amazon-Produkt-URLs haben, können Sie alle Produktdaten von jeder einzelnen Amazon-Produktseite extrahieren. Hier ist ein Beispielskript, das dazu die Python-Requests- und Parsel-Bibliotheken verwendet:

Import-Re-Import-Anfragen von Parsel Import Selector von urllib.parse Import Urljoin Product_urls = [ 'https://www.amazon.com/2021-Apple-10-2-inch-iPad-Wi-Fi/dp/B09G9FPHY6/ref= sr_1_1', ] product_data_list = [] für Produkt-URL in Produkt-URLs: Versuchen Sie: Antwort = Anfragen.get (Produkt-URL), wenn Antwort. Statuscode == 200: Sel = Selector (Text = Antwort. Text) Bilddaten = json.loads (re.findall (r"colorImages':.*'initial':\s*(\[.+?\])},\n", Response.text)[0]) variant_data = re.findall(r'dimensionValuesDisplayData"\s *:\s* ({.+?}),\n', Response.text) feature_bullets = [bullet.strip() für Aufzählungszeichen in sel.css("#feature-bullets li ::text").getall( )] Preis = sel.css('.a-price span[aria-hidden="true"] ::text').get("") wenn nicht Preis: Preis = sel.css('.a-price . a-offscreen ::text').get("") product_data_list.append({ "name": sel.css("#productTitle::text").get("").strip(), "price": Preis, "Sterne": sel.css("i[data-hook=average-star-rating] ::text").get("").strip(), "rating_count": sel.css("div[ data-hook=total-review-count] ::text").get("").strip(), "feature_bullets": feature_bullets, "images": image_data, "variant_data": variant_data, }) außer Ausnahme wie z : print("Fehler",e)

Dieses Skript sammelt eine Reihe von Produktdaten, wobei jedes Produkt als Wörterbuch mit den folgenden Schlüsseln dargestellt wird:

  • name: Der Name des Produkts
  • price: Der Preis des Produkts
  • stars: Die Sternebewertung des Produkts
  • rating_count: Die Gesamtzahl der Bewertungen, die das Produkt erhalten hat
  • feature_bullets: Eine Liste der Feature-Bullets des Produkts
  • images: Eine Liste hochauflösender Bilder des Produkts
  • variant_data: Daten zu den Varianten des Produkts (z. B. verschiedene Farben oder Größen verfügbar)

Es ist erwähnenswert, dass dieses Skript dazu dient, Daten aus Produktseiten mit einem bestimmten Layout zu extrahieren. Wenn Amazon das Layout seiner Produktseiten ändert, muss das Skript möglicherweise aktualisiert werden.

Weitere Überlegungen

Während die oben genannten Skripte einen Ausgangspunkt für das Scraping von Amazon darstellen, müssen für eine vollständige und robuste Scraping-Lösung noch weitere Überlegungen berücksichtigt werden:

1. Umgang mit dynamischen Inhalten

Einige Amazon-Produktseiten verwenden dynamische Inhalte, für deren Laden JavaScript erforderlich ist. Wenn Sie versuchen, diese Seiten mit den oben beschriebenen Methoden zu durchsuchen, stellen Sie möglicherweise fest, dass einige der gewünschten Daten fehlen. In diesen Fällen müssen Sie ein Tool verwenden, das JavaScript rendern kann, wie Selenium oder Puppeteer.

2. Respektieren Sie Robots.txt

Amazonas robots.txt Die Datei teilt Webcrawlern mit, welche Seiten sie besuchen dürfen. Obwohl diese Datei nicht rechtsverbindlich ist, kann ihre Nichtbeachtung dazu führen, dass Ihre IP-Adresse gesperrt wird. Es ist am besten, das zu respektieren robots.txt Datei, um mögliche Probleme zu vermeiden.

3. Ratenbegrenzung

Amazon begrenzt möglicherweise die Anzahl der Anfragen, die Sie in einem bestimmten Zeitraum stellen können. Wenn Sie zu schnell zu viele Anfragen stellen, könnte Amazon Ihre IP-Adresse sperren, die Sie möglicherweise benötigen Proxys für Amazon. Um dies zu vermeiden, können Sie Techniken wie die Drosselung Ihrer Anfragen verwenden oder rotierende IP-Adressen.

4. Ethische Überlegungen

Web Scraping kann eine erhebliche Belastung für den Server einer Website darstellen, daher ist es wichtig, verantwortungsvoll mit dem Scraping umzugehen. Wenn Sie die benötigten Daten auf weniger Seiten abrufen können, ist dies ethischer. Wenn Sie beispielsweise nur grundlegende Produktdaten (Name, Preis, Bild-URL, Bewertung, Anzahl der Bewertungen usw.) benötigen, können Sie diese Daten von den Suchseiten statt von den Produktseiten entfernen und so die Anzahl der erforderlichen Anfragen reduzieren um den Faktor 20 vergrößern.


Zusammenfassend lässt sich sagen, dass Web Scraping zwar ein leistungsstarkes Tool zum Extrahieren von Daten von Websites wie Amazon sein kann, es jedoch wichtig ist, diese Techniken verantwortungsbewusst und im Hinblick auf die Nutzungsbedingungen der Website und die Anforderungen, die Sie an ihre Server stellen, einzusetzen.

Stichworte:

Mitreden

E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind MIT * gekennzeichnet. *