pl
English
Español
中國人
Tiếng Việt
Deutsch
Українська
Português
Français
भारतीय
Türkçe
한국인
Italiano
Gaeilge
اردو
Indonesia Skrobanie recenzji Amazon za pomocą Pythona może być przydatne - niezależnie od tego, czy analizujesz konkurencję, sprawdzasz, co mówią prawdziwi klienci, czy też badasz trendy rynkowe. Jeśli zastanawiasz się, jak skrobać recenzje Amazon za pomocą Pythona, ten krótki samouczek przeprowadzi Cię przez praktyczny proces, który wykorzystuje pakiet Requests i BeautifulSoup do programowego pobierania treści recenzji.
Przed wszystkim należy zainstalować kilka bibliotek. Dwie podstawowe zależności, Requests do wywołań sieciowych i BeautifulSoup do przeglądania drzewa HTML, można zabezpieczyć w jednej linii terminala:
pip install requests
pip install beautifulsoup4
Skoncentrujemy się na recenzjach Amazon w Pythonie i przeanalizujemy każdy etap procesu skrobania krok po kroku.
Zrozumienie struktury HTML witryny jest niezbędne do identyfikacji elementów recenzji. Sekcja recenzji zawiera pola takie jak uchwyt recenzenta, ocena w gwiazdkach i pisemny komentarz; należy je znaleźć za pomocą narzędzi inspekcji przeglądarki.
Tytuł produktu i adres URL:
Łączna ocena:
Sekcja recenzji:
Nazwa autora:
Ocena:
Jak:
Nagłówki odgrywają ważną rolę. Ciągi User-Agent i inne nagłówki są ustawione tak, aby naśladować zwykłą przeglądarkę i zmniejszyć szansę wykrycia. Jeśli chcesz zrobić to dobrze, postępując zgodnie z Amazon scraping guide python pokaże Ci, jak skonfigurować te nagłówki wraz z serwerami proxy, aby Twoje żądania były płynne i nie rzucały się w oczy.
Serwery proxy umożliwiają rotację adresów IP w celu zmniejszenia ryzyka zakazów i ograniczeń prędkości. Są one szczególnie ważne w przypadku scrapingu na dużą skalę.
Uwzględnienie różnych nagłówków, takich jak Accept-Encoding, Accept-Language, Referer, Connection i Upgrade-Insecure-Requests, naśladuje legalne żądanie przeglądarki, zmniejszając ryzyko oznaczenia jako bot.
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"
# Example of a proxy provided by the proxy service
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',
}
# Send HTTP GET request to the URL with headers and proxy
try:
response = requests.get(url, headers=headers, proxies=proxy, timeout=10)
response.raise_for_status() # Raise an error if the request failed
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
Po załadowaniu strony, BeautifulSoup zamienia nieprzetworzony kod HTML w drzewo, które można przeszukiwać. Z tej struktury skrobak pobiera kanoniczne linki do produktów, tytuły stron i wszelkie widoczne agregaty ocen.
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')
# Extracting common product details
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)
Wracamy do tej samej struktury HTML, tym razem koncentrując się na zbieraniu nazwisk recenzentów, ocen w gwiazdkach i pisemnych komentarzy - wszystko to przy użyciu Pythona do wydajnego skrobania recenzji Amazon za pomocą predefiniowanych selektorów.
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,
})
Wbudowana w Pythona funkcja csv.writer może zapisać zebrane dane recenzji w pliku .csv do późniejszej analizy.
import csv
# Define CSV file path
csv_file = 'amazon_reviews.csv'
# Define CSV fieldnames
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']
# Writing data to CSV file
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}")
Przedstawiono blok kodu, który łączy etapy tworzenia żądań, analizowania i wysyłania plików, zamykając cały przepływ pracy skrobania w jednym, możliwym do uruchomienia skrypcie:
import requests
from bs4 import BeautifulSoup
import csv
import urllib3
urllib3.disable_warnings()
# URL of the Amazon product reviews page
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 provided by the proxy service with IP-authorization
path_proxy = 'your_proxy_ip:your_proxy_port'
proxy = {
'http': f'http://{path_proxy}',
'https': f'https://{path_proxy}'
}
# Headers for the HTTP request
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',
}
# Send HTTP GET request to the URL with headers and handle exceptions
try:
response = requests.get(url, headers=headers, timeout=10, proxies=proxy, verify=False)
response.raise_for_status() # Raise an error if the request failed
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
# Use BeautifulSoup to parse the HTML and grab the data you need
soup = BeautifulSoup(response.content, 'html.parser')
# Extracting common product details
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
# Extracting individual reviews
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
# Store each review in a dictionary
reviews.append({
'Product URL': product_url,
'Product Title': product_title,
'Total Rating': total_rating,
'Author': author_name,
'Rating': rating_given,
'Comment': comment,
})
# Define CSV file path
csv_file = 'amazon_reviews.csv'
# Define CSV fieldnames
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']
# Writing data to CSV file
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 confirmation message
print(f"Data saved to {csv_file}")
Niezawodne serwery proxy zwiększają szanse na ominięcie blokad i pomagają zmniejszyć wykrywalność przez filtry antybotowe. W przypadku scrapingu często preferowane są proxy domowe ze względu na ich współczynnik zaufania, podczas gdy statyczne proxy ISP zapewniają szybkość i stabilność.
Skrobanie recenzji produktów Amazon za pomocą Pythona jest całkowicie możliwe, a Python zapewnia niezbędne narzędzia, aby to osiągnąć. Dzięki zaledwie kilku bibliotekom i ostrożnemu przeglądaniu strony można uzyskać wiele przydatnych informacji: od tego, co naprawdę myślą klienci, po wykrywanie błędów konkurencji.
Oczywiście, są pewne przeszkody: Amazon nie przepada za scraperami. Jeśli więc próbujesz skrobać recenzje produktów Amazon w stylu Python na dużą skalę, będziesz potrzebować serwerów proxy, aby pozostać pod radarem. Najbardziej niezawodnymi opcjami są rezydentne serwery proxy (świetny wynik zaufania, rotacyjne adresy IP) lub statyczne serwery proxy dostawców usług internetowych (szybkie i stabilne).
Komentarze: 0