Anleitung zum Auslesen von Amazon-Rezensionen mit Python

Bemerkungen: 0

Das Scraping von Amazon-Rezensionen mit Python ist nützlich, um Konkurrenzanalysen durchzuführen, Rezensionen zu überprüfen und Marktforschung zu betreiben. Hier wird gezeigt, wie man mit Python, BeautifulSoup und Requests-Bibliotheken effizient Produktrezensionen auf Amazon scrapen kann.

Schritt 1. Installieren der erforderlichen Bibliotheken

Bevor Sie mit dem Scrapen beginnen, sollten Sie sicherstellen, dass Sie die erforderlichen Python-Bibliotheken installiert haben:

pip install requests
pip install beautifulsoup4

Schritt 2. Konfigurieren des Scraping-Prozesses

Wir werden uns auf das Extrahieren von Produktrezensionen von der Amazon-Seite konzentrieren und jeden Schritt des Scraping-Prozesses Schritt für Schritt untersuchen.

Verständnis der Struktur der Website

Untersuchen Sie die HTML-Struktur der Amazon-Produktbewertungsseite, um die Elemente zu identifizieren, die wir auslesen wollen: Namen der Rezensenten, Bewertungen und Kommentare.

Produkttitel und URL:

1.png

Gesamtbewertung:

2.png

Abschnitt Überprüfung:

3.png

Name des Autors:

4.png

Bewertung:

5.png

Kommentar:

6.png

Senden von HTTP-Anfragen

Verwenden Sie die Requests-Bibliothek, um HTTP-GET-Anfragen an die Amazon-Produktbewertungsseite zu senden. Richten Sie Header ein, um legitimes Browserverhalten zu imitieren und eine Erkennung zu vermeiden. Proxies und vollständige Request-Header sind unerlässlich, um zu vermeiden, dass sie von Amazon blockiert werden.

Proxies

Die Verwendung von Proxys hilft dabei, IP-Adressen zu rotieren, um IP-Sperren und Ratenbeschränkungen von Amazon zu vermeiden. Dies ist für großangelegtes Scraping entscheidend, um die Anonymität zu wahren und eine Entdeckung zu verhindern. Hier werden die Proxydaten vom Proxydienst bereitgestellt.

Komplette Anfrage-Header

Durch die Angabe verschiedener Header wie Accept-Encoding, Accept-Language, Referer, Connection und Upgrade-Insecure-Requests wird eine legitime Browser-Anfrage nachgeahmt und die Wahrscheinlichkeit, als Bot erkannt zu werden, verringert.


import requests

url = "https://www.amazon.com/Portable-Mechanical-Keyboard-MageGee-Backlit/product-reviews/B098LG3N6R/ref=cm_cr_dp_d_show_all_btm?ie=UTF8&reviewerType=all_reviews"

# Beispiel für einen vom Proxy-Dienst bereitgestellten Proxy
proxy = {
    'http': 'http://your_proxy_ip:your_proxy_port',
    'https': 'https://your_proxy_ip:your_proxy_port'
}

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-US,en;q=0.9',
    'cache-control': 'no-cache',
    'dnt': '1',
    'pragma': 'no-cache',
    'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
    'sec-ch-ua-mobile': '?0',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    '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',
}

# HTTP-GET-Anfrage an die URL mit Headern und Proxy senden
try:
    response = requests.get(url, headers=headers, proxies=proxy, timeout=10)
    response.raise_for_status()  # Raise an exception for bad response status
except requests.exceptions.RequestException as e:
    print(f"Error: {e}")

Schritt 3. Extrahieren von Produktdaten mit BeautifulSoup

Parsen Sie den HTML-Inhalt der Antwort mit BeautifulSoup, um allgemeine Produktdetails wie URL, Titel und Gesamtbewertung zu extrahieren.


from bs4 import BeautifulSoup

soup = BeautifulSoup(response.content, 'html.parser')

# Extrahieren allgemeiner Produktdaten
product_url = soup.find('a', {'data-hook': 'product-link'}).get('href', '')
product_title = soup.find('a', {'data-hook': 'product-link'}).get_text(strip=True)
total_rating = soup.find('span', {'data-hook': 'rating-out-of-text'}).get_text(strip=True)

Schritt 4. Extrahieren von Bewertungsdaten mit BeautifulSoup

Fahren Sie mit dem Parsen des HTML-Inhalts fort, um die Namen der Rezensenten, Bewertungen und Kommentare auf der Grundlage der identifizierten XPath-Ausdrücke zu extrahieren.


reviews = []
review_elements = soup.find_all('div', {'data-hook': 'review'})
for review in review_elements:
    author_name = review.find('span', class_='a-profile-name').get_text(strip=True)
    rating_given = review.find('i', class_='review-rating').get_text(strip=True)
    comment = review.find('span', class_='review-text').get_text(strip=True)

    reviews.append({
        'Product URL': product_url,
        'Product Title': product_title,
        'Total Rating': total_rating,
        'Author': author_name,
        'Rating': rating_given,
        'Comment': comment,
    })

Schritt 5. Speichern der Daten in CSV

Verwenden Sie das in Python eingebaute CSV-Modul, um die extrahierten Daten zur weiteren Analyse in einer CSV-Datei zu speichern.


import csv

# CSV-Dateipfad definieren
csv_file = 'amazon_reviews.csv'

# CSV-Feldnamen definieren
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']

# Daten in eine CSV-Datei schreiben
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()
    for review in reviews:
        writer.writerow(review)

print(f"Data saved to {csv_file}")

Kompletter Code

Hier ist der vollständige Code, um Amazon-Rezensionsdaten abzurufen und in einer CSV-Datei zu speichern:


import requests
from bs4 import BeautifulSoup
import csv
import urllib3

urllib3.disable_warnings()

# URL der Amazon-Produktbewertungsseite
url = "https://www.amazon.com/Portable-Mechanical-Keyboard-MageGee-Backlit/product-reviews/B098LG3N6R/ref=cm_cr_dp_d_show_all_btm?ie=UTF8&reviewerType=all_reviews"

# Proxy, der vom Proxy-Dienst mit IP-Autorisierung bereitgestellt wird
path_proxy = 'your_proxy_ip:your_proxy_port'
proxy = {
   'http': f'http://{path_proxy}',
   'https': f'https://{path_proxy}'
}

# Kopfzeilen für die HTTP-Anfrage
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-US,en;q=0.9',
   'cache-control': 'no-cache',
   'dnt': '1',
   'pragma': 'no-cache',
   'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
   'sec-ch-ua-mobile': '?0',
   'sec-fetch-dest': 'document',
   'sec-fetch-mode': 'navigate',
   'sec-fetch-site': 'same-origin',
   'sec-fetch-user': '?1',
   'upgrade-insecure-requests': '1',
   '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',
}

# HTTP-GET-Anfrage an die URL mit Kopfzeilen senden und Ausnahmen behandeln
try:
   response = requests.get(url, headers=headers, timeout=10, proxies=proxy, verify=False)
   response.raise_for_status()  # Raise an exception for bad response status
except requests.exceptions.RequestException as e:
   print(f"Error: {e}")

# Parsen des HTML-Inhalts mit BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')

# Extrahieren allgemeiner Produktdaten
product_url = soup.find('a', {'data-hook': 'product-link'}).get('href', '')  # Extract product URL
product_title = soup.find('a', {'data-hook': 'product-link'}).get_text(strip=True)  # Extract product title
total_rating = soup.find('span', {'data-hook': 'rating-out-of-text'}).get_text(strip=True)  # Extract total rating

# Extraktion einzelner Bewertungen
reviews = []
review_elements = soup.find_all('div', {'data-hook': 'review'})
for review in review_elements:
   author_name = review.find('span', class_='a-profile-name').get_text(strip=True)  # Extract author name
   rating_given = review.find('i', class_='review-rating').get_text(strip=True)  # Extract rating given
   comment = review.find('span', class_='review-text').get_text(strip=True)  # Extract review comment

   # Jede Bewertung in einem Wörterbuch speichern
   reviews.append({
       'Product URL': product_url,
       'Product Title': product_title,
       'Total Rating': total_rating,
       'Author': author_name,
       'Rating': rating_given,
       'Comment': comment,
   })

# CSV-Dateipfad definieren
csv_file = 'amazon_reviews.csv'

# Define CSV fieldnames
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']

# Daten in eine CSV-Datei schreiben
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
   writer = csv.DictWriter(file, fieldnames=fieldnames)
   writer.writeheader()
   for review in reviews:
       writer.writerow(review)

# Bestätigungsnachricht drucken
print(f"Data saved to {csv_file}")

Abschließend ist zu betonen, dass die Auswahl zuverlässiger Proxyserver ein wichtiger Schritt bei der Erstellung von Scriptwriting für Web Scraping ist. Dies gewährleistet eine effektive Umgehung von Blockierungen und Schutz vor Anti-Bot-Filtern. Am besten geeignet für Scraping sind Proxyserver für Privatanwender, die einen hohen Vertrauensfaktor und dynamische IP-Adressen bieten, sowie statische ISP-Proxys, die hohe Geschwindigkeit und Betriebsstabilität bieten.

Bemerkungen:

0 Bemerkungen