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.
Bevor Sie mit dem Scrapen beginnen, sollten Sie sicherstellen, dass Sie die erforderlichen Python-Bibliotheken installiert haben:
pip install requests
pip install beautifulsoup4
Wir werden uns auf das Extrahieren von Produktrezensionen von der Amazon-Seite konzentrieren und jeden Schritt des Scraping-Prozesses Schritt für Schritt untersuchen.
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:
Gesamtbewertung:
Abschnitt Überprüfung:
Name des Autors:
Bewertung:
Kommentar:
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.
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.
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}")
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)
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,
})
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}")
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.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.ru!
Bemerkungen: 0