Lo scraping delle recensioni di Amazon con Python è utile per l'analisi dei concorrenti, il controllo delle recensioni e le ricerche di mercato. Questo dimostra come effettuare lo scraping di recensioni di prodotti su Amazon in modo efficiente con Python, BeautifulSoup e le librerie Requests.
Prima di immergersi nel processo di scraping, assicurarsi di avere installato le librerie Python necessarie:
pip install requests
pip install beautifulsoup4
Ci concentreremo sull'estrazione di recensioni di prodotti dalla pagina di Amazon ed esamineremo passo dopo passo ogni fase del processo di scraping.
Ispezionare la struttura HTML della pagina delle recensioni dei prodotti Amazon per identificare gli elementi che si vogliono scrapare: nomi dei recensori, valutazioni e commenti.
Titolo e URL del prodotto:
Valutazione totale:
Sezione di revisione:
Nome dell'autore:
Rating:
Commento:
Utilizzare la libreria Requests per inviare richieste HTTP GET alla pagina delle recensioni dei prodotti Amazon. Impostare le intestazioni per imitare il comportamento legittimo del browser ed evitare il rilevamento. I proxy e le intestazioni complete delle richieste sono essenziali per evitare di essere bloccati da Amazon.
L'uso dei proxy aiuta a ruotare gli indirizzi IP per evitare i divieti IP e i limiti di velocità di Amazon. È fondamentale per lo scraping su larga scala per mantenere l'anonimato e impedire il rilevamento. Qui, i dettagli del proxy sono forniti dal servizio proxy.
L'inclusione di varie intestazioni come Accept-Encoding, Accept-Language, Referer, Connection e Upgrade-Insecure-Requests imita una richiesta legittima del browser, riducendo la possibilità di essere segnalati come 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"
# Esempio di un proxy fornito dal servizio 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',
}
# Inviare la richiesta HTTP GET all'URL con intestazioni e proxy
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}")
Analizzare il contenuto HTML della risposta usando BeautifulSoup per estrarre i dettagli comuni del prodotto, come l'URL, il titolo e la valutazione totale.
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')
# Estrazione di dettagli di prodotto comuni
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)
Continuare l'analisi del contenuto HTML per estrarre i nomi dei recensori, le valutazioni e i commenti in base alle espressioni XPath identificate.
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,
})
Utilizzare il modulo CSV integrato in Python per salvare i dati estratti in un file CSV per ulteriori analisi.
import csv
# Definire il percorso del file CSV
csv_file = 'amazon_reviews.csv'
# Definire i nomi dei campi CSV
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']
# Scrittura dei dati in un file CSV
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}")
Ecco il codice completo per analizzare i dati delle recensioni di Amazon e salvarli in un file CSV:
import requests
from bs4 import BeautifulSoup
import csv
import urllib3
urllib3.disable_warnings()
# URL della pagina delle recensioni dei prodotti Amazon
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 fornito dal servizio proxy con autorizzazione IP
path_proxy = 'your_proxy_ip:your_proxy_port'
proxy = {
'http': f'http://{path_proxy}',
'https': f'https://{path_proxy}'
}
# Intestazioni per la richiesta HTTP
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',
}
# Inviare la richiesta HTTP GET all'URL con le intestazioni e gestire le eccezioni
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}")
# Analizzare il contenuto HTML usando BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')
# Estrazione di dettagli di prodotto comuni
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
# Estrazione delle singole recensioni
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
# Memorizzare ogni recensione in un dizionario
reviews.append({
'Product URL': product_url,
'Product Title': product_title,
'Total Rating': total_rating,
'Author': author_name,
'Rating': rating_given,
'Comment': comment,
})
# Definire il percorso del file CSV
csv_file = 'amazon_reviews.csv'
# Definire i nomi dei campi CSV
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']
# Scrittura dei dati in un file CSV
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)
# Stampa del messaggio di conferma
print(f"Data saved to {csv_file}")
In conclusione, è fondamentale sottolineare che la selezione di server proxy affidabili è un passo fondamentale nella scrittura di script per il web scraping. Ciò garantisce l'effettivo aggiramento dei blocchi e la protezione dai filtri anti-bot. Le opzioni più adatte per lo scraping sono i server proxy residenziali, che offrono un elevato fattore di fiducia e indirizzi IP dinamici, insieme ai proxy statici dell'ISP che garantiscono alta velocità e stabilità operativa.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commenti: 0