Come estraggo le recensioni Amazon con Python (superando il login wall)

Ultimo aggiornamento il August 21, 2026
Come estraggo le recensioni Amazon con Python (superando il login wall)

Il mio scraper per le recensioni Amazon funzionava alla grande da sei settimane — poi, una mattina, ha cominciato a restituire 200 OK e una pagina completamente vuota. Nessun errore, nessun CAPTCHA, solo HTML vuoto al posto di centinaia di recensioni.

Se ti suona familiare, non sei l’unico. Alla fine del 2025 Amazon ha iniziato a proteggere le pagine complete delle recensioni dietro un login obbligatorio, e tantissimi script Python di scraping si sono rotti da un giorno all’altro. Negli ultimi mesi ho lavorato a Thunderbit affrontando il problema da entrambe le parti — sia costruendo il nostro scraper AI sia mantenendo la mia pipeline Python per le recensioni — quindi ho pensato che fosse il momento giusto per scrivere la guida che avrei voluto avere quando il mio script ha smesso di funzionare. Questo articolo copre l’approccio che oggi funziona davvero: autenticazione basata sui cookie, selettori stabili che resistono all’offuscamento CSS di Amazon, soluzioni alternative al limite di 10 pagine di paginazione, difese anti-bot e, in più, una sezione extra sull’analisi del sentiment che trasforma il testo grezzo delle recensioni in insight di business concreti. E se a metà lettura pensi: “Preferirei non dovermi tenere tutto questo codice sulle spalle”, ti mostrerò come Thunderbit fa lo stesso lavoro in circa due minuti, senza usare Python.

Cos’è lo scraping delle recensioni Amazon e perché conta?

Lo scraping delle recensioni Amazon è il processo di estrazione automatica dei dati delle recensioni clienti — valutazione in stelle, testo della recensione, nome dell’autore, data, badge di acquisto verificato — dalle pagine prodotto di Amazon. Dal momento che Amazon ha rimosso i contenuti delle recensioni dalla Product Advertising API nel 2010 (senza mai reinserirli), il web scraping è l’unico modo programmatico per accedere a questi dati.

I numeri parlano chiaro. Il 95% degli acquirenti legge le recensioni prima di comprare, e il 94% indica Amazon come fonte principale di recensioni prodotto. Mostrare anche solo 5 recensioni in una scheda prodotto può aumentare la conversione del 270%. Le aziende che analizzano in modo sistematico il sentiment delle recensioni ottengono fino al 15% di retention clienti in più. Non si tratta di teoria astratta di data science: è intelligence competitiva, segnale per migliorare il prodotto e linguaggio di marketing, tutto già disponibile in chiaro sui server di Amazon.

Perché usare Python per estrarre recensioni Amazon

Python resta il linguaggio di riferimento per questo tipo di lavoro. È il linguaggio più desiderato nella Stack Overflow Developer Survey 2024, e il suo ecosistema — requests, BeautifulSoup, pandas, Scrapy — rende lo scraping accessibile anche a chi non è uno sviluppatore full-time.

Team diversi sfruttano questi dati in modi diversi:

TeamCaso d’usoCosa estraggono
Prodotto / R&DIndividuare reclami ricorrenti, dare priorità agli interventiTesto delle recensioni 1–2 stelle, frequenza delle parole chiave
SalesMonitorare il sentiment sui prodotti dei concorrentiValutazioni, andamento del volume di recensioni
MarketingTrovare il linguaggio dei clienti per i copy pubblicitariFrasi positive dalle recensioni, menzioni delle funzionalità
Operations EcommerceMonitorare nel tempo il sentiment dei propri prodottiDistribuzione delle stelle, rapporto tra acquisti verificati
Ricerca di mercatoConfrontare i leader di categoria su più funzionalitàDataset di recensioni multi-ASIN

Un brand di utensili da cucina ha analizzato le recensioni negative e scoperto che il 22% citava che “il rivestimento antiaderente si consuma”, ha riformulato il prodotto e ha riconquistato il primo posto tra i Best Seller entro 60 giorni. Un’azienda di fitness tracker ha individuato “irritazione del cinturino” nel testo delle recensioni, ha identificato un problema di allergia al lattice, ha lanciato una variante ipoallergenica e ha ridotto i resi del 40%. Questo è il tipo di ritorno sull’investimento che rende l’impegno tecnico più che sensato.

Login wall: perché il tuo scraper di recensioni Amazon ha smesso di funzionare

Il 14 novembre 2024, Amazon ha iniziato a richiedere l’accesso per vedere la pagina completa delle recensioni prodotto. La modifica è stata confermata sia nei forum della community sia nei blog dei vendor di scraping. Se apri /product-reviews/{ASIN}/ in una finestra in incognito, verrai rimandato a una pagina di sign-in invece che ai dati delle recensioni.

python-web-scraping-diagram.webp

I sintomi sono subdoli: lo script riceve una risposta 200 OK, ma il corpo HTML contiene un modulo di login (name="email", id="ap_password") invece delle recensioni. Nessun codice di errore. Nessun CAPTCHA. Solo… niente di utile.

Amazon ha introdotto questa barriera per motivi anti-bot e di conformità regionale. L’applicazione è incoerente — a volte una finestra del browser appena aperta mostra qualche recensione prima che scatti il blocco, soprattutto nella prima pagina — ma per qualsiasi scraper che lavori su scala conviene partire dal presupposto che il blocco sia sempre attivo.

I diversi domini nazionali di Amazon (.de, .co.uk, .co.jp) applicano il blocco in modo indipendente. Come ha scritto un utente in un forum: “serve un login per ogni paese.” I cookie di .com non funzioneranno su .co.uk.

Recensioni in evidenza vs recensioni complete: cosa puoi ancora vedere senza login

Le pagine prodotto Amazon (l’URL /dp/{ASIN}/) mostrano ancora circa 8 “featured reviews” senza autenticazione. Sono recensioni selezionate dall’algoritmo di Amazon e utili per un controllo rapido del sentiment, ma non si possono ordinare, filtrare o paginare.

Le pagine complete delle recensioni (/product-reviews/{ASIN}/) — con ordinamento per più recenti, filtro per stelle e paginazione su centinaia di recensioni — richiedono l’accesso.

Se ti servono solo poche recensioni per una verifica veloce, puoi prenderle dalla pagina prodotto. Se invece te ne servono centinaia o migliaia, devi gestire l’autenticazione.

Cosa ti serve prima di iniziare: setup Python e librerie

Prima di scrivere codice, ecco cosa serve:

  • Difficoltà: intermedia (buona padronanza di Python, conoscenza base di HTML)
  • Tempo richiesto: circa 45 minuti per la pipeline completa; circa 10 minuti per uno scraping base
  • Occorrente: Python 3.8+, browser Chrome, account Amazon valido

Installa le librerie principali:

pip install requests beautifulsoup4 lxml pandas textblob

Opzionale (per un’analisi del sentiment più avanzata):

pip install transformers torch

Cos’è un ASIN? È l’identificativo prodotto di Amazon, composto da 10 caratteri. Lo trovi in qualsiasi URL prodotto — ad esempio, in amazon.com/dp/B0BCNKKZ91, l’ASIN è B0BCNKKZ91. È la chiave che userai nell’URL delle recensioni.

Step 1: superare il login wall con l’autenticazione basata sui cookie

L’approccio più affidabile è fare login su Amazon nel browser, copiare i cookie di sessione e inserirli nella tua requests.Session() di Python. Così eviti i CAPTCHA e l’autenticazione SMS 2FA che complicano le automazioni di login basate su Selenium.

Ti servono questi sette cookie:

Nome cookieScopo
session-idIdentificativo di sessione variabile
session-id-timeTimestamp della sessione
session-tokenToken di sessione variabile
ubid-mainIdentificatore di navigazione dell’utente
at-mainToken di autenticazione principale
sess-at-mainAuth valida per la sessione
x-mainIdentificatore legato all’e-mail dell’utente

Come estrarre i cookie da Chrome DevTools

  1. Accedi a amazon.com in Chrome
  2. Apri DevTools (F12 oppure tasto destro → Ispeziona)
  3. Vai su ApplicationStorageCookieshttps://www.amazon.com
  4. Trova ogni nome cookie nella tabella e copia il valore
  5. Formattali come stringa separata da punto e virgola per Python

Configura la sessione così:

import requests

session = requests.Session()

# Incolla qui i valori dei cookie
cookies = {
    "session-id": "YOUR_SESSION_ID",
    "session-id-time": "YOUR_SESSION_ID_TIME",
    "session-token": "YOUR_SESSION_TOKEN",
    "ubid-main": "YOUR_UBID_MAIN",
    "at-main": "YOUR_AT_MAIN",
    "sess-at-main": "YOUR_SESS_AT_MAIN",
    "x-main": "YOUR_X_MAIN",
}

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.5",
}

session.cookies.update(cookies)
session.headers.update(headers)

Importante: riusa sempre lo stesso oggetto session per tutte le richieste. In questo modo i cookie restano coerenti e la navigazione assomiglia a quella di un browser reale. In genere i cookie durano da giorni a settimane sotto carico di scraping, ma se ricominciano a comparire i redirect al login, aggiorna i cookie dal browser.

Per i marketplace diversi da .com, i nomi dei cookie cambiano leggermente — amazon.de usa at-acbde invece di at-main, amazon.co.uk usa at-acbuk, e così via. Ogni marketplace richiede una sessione indipendente.

Step 2: costruire la richiesta e analizzare l’HTML delle recensioni con BeautifulSoup

L’URL delle recensioni Amazon segue questo formato:

https://www.amazon.com/product-reviews/{ASIN}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1

La funzione principale:

from bs4 import BeautifulSoup
import time, random

def get_soup(session, url):
    time.sleep(random.uniform(2, 5))  # Pausa gentile
    response = session.get(url, timeout=15)

    # Rileva il login wall
    if "ap_email" in response.text or "Amazon Sign-In" in response.text:
        raise Exception("Login wall rilevato — aggiorna i cookie")

    if response.status_code != 200:
        raise Exception(f"HTTP {response.status_code}")

    return BeautifulSoup(response.text, "lxml")

Un piccolo trucco utile: prima di aprire la pagina delle recensioni, visita prima la pagina prodotto. Così la tua sessione segue un pattern di navigazione più naturale.

# Visita prima la pagina prodotto (simula la navigazione reale)
product_url = f"https://www.amazon.com/dp/{asin}"
session.get(product_url, timeout=15)
time.sleep(random.uniform(1, 3))

# Poi apri la pagina recensioni
reviews_url = f"https://www.amazon.com/product-reviews/{asin}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1"
soup = get_soup(session, reviews_url)

Step 3: usare selettori stabili per estrarre i dati delle recensioni (smetti di dipendere dalle classi CSS)

Qui si rompe la maggior parte dei tutorial del 2022–2023. Amazon offusca i nomi delle classi CSS — cambiano periodicamente e, come ha scritto un developer frustrato in un thread di forum: “nessuno di loro aveva un pattern unico per i nomi delle classi dei tag span.”

La soluzione: Amazon usa attributi data-hook sugli elementi delle recensioni, e sono sorprendentemente stabili. Sono identificatori semantici su cui si basa il frontend di Amazon, quindi non vengono randomizzati.

Campo recensioneSelettore stabile (data-hook)Selettore fragile (classe)
Testo recensione[data-hook="review-body"].review-text-content (cambia)
Valutazione in stelle[data-hook="review-star-rating"].a-icon-alt (ambiguo)
Titolo recensione[data-hook="review-title"].review-title (a volte)
Nome autorespan.a-profile-nameRelativamente stabile
Data recensione[data-hook="review-date"].review-date (dipende dalla regione)
Acquisto verificato[data-hook="avp-badge"]span.a-size-mini

Il codice di estrazione con i selettori data-hook:

import re

def extract_reviews(soup):
    reviews = []
    review_divs = soup.select('[data-hook="review"]')

    for div in review_divs:
        # Valutazione in stelle
        rating_el = div.select_one('[data-hook="review-star-rating"]')
        rating = None
        if rating_el:
            rating_text = rating_el.get_text(strip=True)
            match = re.search(r'(\d\.?\d?)', rating_text)
            if match:
                rating = float(match.group(1))

        # Titolo
        title_el = div.select_one('[data-hook="review-title"]')
        title = title_el.get_text(strip=True) if title_el else ""

        # Corpo
        body_el = div.select_one('[data-hook="review-body"]')
        body = body_el.get_text(strip=True) if body_el else ""

        # Autore
        author_el = div.select_one('span.a-profile-name')
        author = author_el.get_text(strip=True) if author_el else ""

        # Data e paese
        date_el = div.select_one('[data-hook="review-date"]')
        date_text = date_el.get_text(strip=True) if date_el else ""
        # Formato: "Reviewed in the United States on January 15, 2025"
        country_match = re.search(r'Reviewed in (.+?) on', date_text)
        date_match = re.search(r'on (.+)$', date_text)
        country = country_match.group(1) if country_match else ""
        date = date_match.group(1) if date_match else ""

        # Acquisto verificato
        verified_el = div.select_one('[data-hook="avp-badge"]')
        verified = bool(verified_el)

        reviews.append({
            "author": author,
            "rating": rating,
            "title": title,
            "content": body,
            "date": date,
            "country": country,
            "verified": verified,
        })

    return reviews

Sto usando questo set di selettori su più ASIN da mesi, e gli attributi data-hook non sono mai cambiati. Le classi CSS, invece, nello stesso periodo sono cambiate almeno due volte.

Step 4: gestire la paginazione e il limite di 10 pagine di Amazon

Amazon limita il parametro pageNumber a 10 pagine da 10 recensioni ciascuna — un tetto rigido di circa 100 recensioni per ogni combinazione di filtri. Il pulsante “Pagina successiva” semplicemente sparisce dopo la pagina 10.

Loop base di paginazione:

all_reviews = []

for page in range(1, 11):
    url = f"https://www.amazon.com/product-reviews/{asin}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber={page}"
    soup = get_soup(session, url)
    page_reviews = extract_reviews(soup)

    if not page_reviews:
        break  # Nessuna recensione in questa pagina

    all_reviews.extend(page_reviews)
    print(f"Pagina {page}: {len(page_reviews)} recensioni")

Come ottenere più di 10 pagine di recensioni Amazon

La soluzione alternativa è il raggruppamento per filtri. Ogni combinazione di filterByStar e sortBy ottiene la propria finestra indipendente di 10 pagine.

Valori del filtro stelle: one_star, two_star, three_star, four_star, five_star
Valori ordinamento: recent, helpful (predefinito)

Combinando tutti e 5 i filtri stelle × 2 ordinamenti, puoi arrivare a 100 pagine, cioè fino a 1.000 recensioni per prodotto — e per prodotti con distribuzioni delle stelle sbilanciate, spesso si riesce a recuperare quasi tutto il set di recensioni.

star_filters = ["one_star", "two_star", "three_star", "four_star", "five_star"]
sort_orders = ["recent", "helpful"]
all_reviews = []
seen_titles = set()  # Deduplicazione semplice

for star in star_filters:
    for sort in sort_orders:
        for page in range(1, 11):
            url = (
                f"https://www.amazon.com/product-reviews/{asin}"
                f"?filterByStar={star}&sortBy={sort}&pageNumber={page}"
            )
            soup = get_soup(session, url)
            page_reviews = extract_reviews(soup)

            if not page_reviews:
                break

            for review in page_reviews:
                # Deduplica usando la combinazione titolo + autore
                key = (review["title"], review["author"])
                if key not in seen_titles:
                    seen_titles.add(key)
                    all_reviews.append(review)

            print(f"[{star}/{sort}] Pagina {page}: {len(page_reviews)} recensioni")

print(f"Recensioni uniche totali: {len(all_reviews)}")

Ci sarà sovrapposizione tra i vari bucket, quindi la deduplicazione è fondamentale. Io uso la combinazione titolo recensione + nome autore come chiave rapida — non perfetta, ma intercetta la maggior parte dei duplicati.

Step 5: aggirare le difese anti-bot (rotazione, throttling, retry)

Amazon usa AWS WAF Bot Control, e negli ultimi tempi è diventato molto più aggressivo. Le contromisure a un solo livello (solo User-Agent rotanti, solo ritardi aggiunti) non bastano più.

TecnicaImplementazione
Rotazione User-AgentScelta casuale tra 10+ stringhe reali di browser
Exponential backoffRitardi di retry 2s → 4s → 8s sui 503
Throttling delle richiesterandom.uniform(2, 5) secondi tra le pagine
Rotazione proxyCiclo tra proxy residenziali
Fingerprint di sessioneCookie + header coerenti per ogni sessione
Impersonificazione TLSUsare curl_cffi invece di requests standard in produzione

Un wrapper di retry adatto alla produzione:

import time, random

USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 15_7_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
]

def scrape_with_retries(session, url, max_retries=3):
    for attempt in range(max_retries):
        try:
            session.headers["User-Agent"] = random.choice(USER_AGENTS)
            time.sleep(random.uniform(2, 5))

            response = session.get(url, timeout=15)

            # Rileva blocchi
            if "validateCaptcha" in response.url or "Robot Check" in response.text:
                wait = (2 ** attempt) * 5
                print(f"CAPTCHA rilevato. Attendo {wait}s...")
                time.sleep(wait)
                continue

            if response.status_code in (429, 503):
                wait = (2 ** attempt) * 2
                print(f"Rate limit rilevato ({response.status_code}). Attendo {wait}s...")
                time.sleep(wait)
                continue

            if "ap_email" in response.text:
                raise Exception("Login wall — cookie scaduti")

            return BeautifulSoup(response.text, "lxml")

        except Exception as e:
            if attempt == max_retries - 1:
                raise
            print(f"Tentativo {attempt + 1} fallito: {e}")

    return None

Nota sui proxy: Amazon blocca gli intervalli IP noti dei datacenter (AWS, GCP, Azure, DigitalOcean) a livello di rete. Se scrapi più di qualche centinaio di pagine, i proxy residenziali diventano di fatto obbligatori — aspettati una spesa di 50–200+ $ al mese a seconda del volume. Per progetti piccoli (meno di 100 richieste al giorno), un throttling accurato dal tuo IP domestico spesso funziona bene.

Amazon inoltre ispeziona le fingerprint TLS. La libreria requests standard di Python ha un JA3 hash ben noto che i WAF bloccano in anticipo. Per scraper destinati alla produzione, valuta curl_cffi, che impersona stack TLS reali dei browser. Per scraping da livello tutorial (qualche centinaio di pagine), requests con header ben impostati di solito basta.

Step 6: esportare le recensioni Amazon raccolte in CSV o Excel

Una volta raccolte le recensioni, trasformarle in un formato utile è semplice con pandas:

import pandas as pd

df = pd.DataFrame(all_reviews)
df.to_csv("amazon_reviews.csv", index=False)
print(f"Esportate {len(df)} recensioni in amazon_reviews.csv")

Esempio di output:

authorratingtitlecontentdatecountryverified
Sarah M.5.0Miglior acquisto dell’annoLa batteria dura tutto il giorno, lo schermo è fantastico...January 15, 2025the United StatesTrue
Mike T.2.0Deluso dopo 2 settimaneLa porta di ricarica ha smesso di funzionare...February 3, 2025the United StatesTrue
Priya K.4.0Ottimo rapporto qualità-prezzoFa tutto quello che mi serve, solo un leggero ritardo con le app pesanti...March 10, 2025the United StatesFalse

Per esportare in Excel: df.to_excel("amazon_reviews.xlsx", index=False) (richiede openpyxl).

Per Google Sheets, la libreria gspread funziona ma richiede 8+ passaggi di configurazione su Google Cloud — creare un progetto, abilitare due API, generare credenziali di service account, condividere il foglio. Se ti sembra più setup dello scraping stesso, non hai torto. (È uno di quei momenti in cui uno strumento come Thunderbit che esporta su Google Sheets con un clic inizia a sembrare davvero allettante.)

Bonus: aggiungere l’analisi del sentiment alle recensioni estratte in 5 righe di Python

La maggior parte dei tutorial sullo scraping si ferma all’export CSV. Ma assegnare un punteggio al sentiment è ciò che trasforma i dati grezzi in decisioni di business.

Il punto di partenza più veloce è TextBlob:

from textblob import TextBlob

df["sentiment"] = df["content"].apply(lambda x: TextBlob(str(x)).sentiment.polarity)

Otterrai un punteggio di polarità da -1.0 (molto negativo) a +1.0 (molto positivo) per ogni recensione. Esempio di output:

content (troncato)ratingsentiment
"La batteria dura tutto il giorno, lo schermo è fantastico..."5.00.65
"La porta di ricarica ha smesso di funzionare dopo..."2.0-0.40
"Fa tutto quello che mi serve, solo un po' di ritardo su..."4.00.25
"Assolutamente pessimo. Reso immediato."1.0-0.75
"Va bene. Nulla di speciale, ma funziona."3.00.10

Le righe più interessanti sono quelle che non coincidono: una recensione da 3 stelle con tono positivo, oppure una da 5 stelle con linguaggio negativo. Queste discrepanze spesso fanno emergere opinioni sfumate che le sole stelle non mostrano.

ai-review-analysis.webp

Per una precisione di livello produttivo, la raccomandazione è Hugging Face Transformers. VADER è stato addestrato sui tweet, non sulle recensioni prodotto, e i modelli transformer raggiungono oltre il 98% di accuratezza nella classificazione delle recensioni rispetto agli strumenti lessicali. Il modello nlptown/bert-base-multilingual-uncased-sentiment può persino prevedere direttamente il punteggio da 1 a 5 stelle:

from transformers import pipeline

clf = pipeline("sentiment-analysis",
               model="nlptown/bert-base-multilingual-uncased-sentiment")
df["predicted_stars"] = df["content"].apply(
    lambda x: int(clf(str(x)[:512])[0]["label"][0])
)

Le recensioni Amazon seguono una distribuzione a J — un forte picco a 5 stelle, un picco più piccolo a 1 stella e una valle al centro. Questo significa che la media delle stelle spesso è un pessimo indicatore della qualità reale del prodotto. Segmenta il cluster a 1 stella e analizza i temi ricorrenti: di solito è lì che si nasconde il difetto davvero correggibile.

Il compromesso onesto: Python fai-da-te vs API di scraping a pagamento vs Thunderbit

Ho mantenuto scraper Python per Amazon, e te lo dico con sincerità: si rompono. I selettori cambiano, i cookie scadono, Amazon introduce un nuovo livello di rilevamento bot, e all’improvviso il sabato mattina lo passi a debuggare uno scraper invece che ad analizzare dati. Anche nei forum molti raccontano la stessa frustrazione — script fai-da-te che “funzionavano il mese scorso” e ora richiedono patch continue.

Ecco come si confrontano i tre approcci principali:

CriterioPython fai-da-te (BS4/Selenium)API di scraping a pagamentoThunderbit (No-Code)
Tempo di setup1–3 ore30 min (API key)2 minuti
CostoGratis (+ costo proxy)50–200+ $/mesePiano gratuito disponibile
Gestione login wallGestione manuale dei cookieDi solito inclusoGestito automaticamente
ManutenzioneAlta (i selettori si rompono)Bassa (il provider mantiene)Zero (l’AI si adatta)
PaginazioneServe codice personalizzatoInclusaInclusa
Supporto multi-paeseSessioni separate per dominioDi solito supportatoBasato sul browser = la tua locale
Analisi sentimentDevi aggiungere il tuo codiceA volte inclusaEsporta su Sheets, analizza ovunque
Ideale perApprendimento, controllo totalePipeline di produzione e scalaEstrazioni rapide, team non tecnici

Python ti dà pieno controllo ed è davvero il modo migliore per capire come funziona lo scraping sotto il cofano. Le API a pagamento (ScrapingBee, Oxylabs, Bright Data) hanno senso per pipeline di produzione in cui la continuità conta più dei costi. E per i team che hanno bisogno di dati sulle recensioni senza il peso dello sviluppo — operations ecommerce che monitorano i concorrenti ogni settimana, team marketing che estraggono il linguaggio dei clienti per i copy — c’è una terza strada.

Come fare scraping delle recensioni Amazon con Thunderbit (senza codice, senza manutenzione)

Abbiamo creato Thunderbit proprio per gestire quei casi in cui mantenere uno scraper Python è troppo pesante. Il flusso è questo:

  1. Installa l'estensione Chrome di Thunderbit
  2. Apri nel browser la pagina delle recensioni del prodotto Amazon (sei già loggato, quindi il login wall non è un problema)
  3. Clicca “AI Suggest Fields” — Thunderbit legge la pagina e propone colonne come Autore, Valutazione, Titolo, Testo recensione, Data, Acquisto verificato
  4. Clicca “Scrape” — i dati vengono estratti subito, con paginazione integrata
  5. Esporta in Excel, Google Sheets, Airtable o Notion

Il vantaggio principale è che l’AI di Thunderbit legge la struttura della pagina da capo ogni volta. Nessun selettore CSS da mantenere, nessuna gestione dei cookie, nessun codice anti-bot. Quando Amazon cambia l’HTML, l’AI si adatta. Per chi vuole accesso programmatico senza dover costruire tutto da zero, Thunderbit offre anche una Extract API — estrazione dati strutturata via API con rilevamento campi guidato dall’AI, senza manutenzione dei selettori.

Per approfondimenti sui dati Amazon, vedi le nostre guide su come fare scraping di prodotti e recensioni Amazon e su estrarre e analizzare i dati di vendita Amazon.

Consigli per fare scraping delle recensioni Amazon su larga scala con Python

Se stai estraendo recensioni su molti ASIN, alcune buone pratiche ti risparmieranno parecchi grattacapi:

  • Elabora gli ASIN a blocchi con pause tra i prodotti, non solo tra le pagine. Io uso pause di 10–15 secondi tra un ASIN e l’altro.
  • Deduplica in modo aggressivo. Quando combini più filtri per stelle e ordini, otterrai recensioni sovrapposte. Usa un set di tuple (title, author, date) come chiave di deduplicazione.
  • Registra i fallimenti. Tieni traccia di quali combinazioni ASIN + pagina + filtro sono fallite, così puoi ritentarle senza rifare tutto da capo.
  • Usa un database per progetti grandi. Un semplice database SQLite scala molto meglio dei file CSV che continuano a crescere:
import sqlite3

conn = sqlite3.connect("reviews.db")
df.to_sql("reviews", conn, if_exists="append", index=False)
  • Programma scraping ricorrenti. Per un monitoraggio continuativo, imposta un cron job oppure usa la funzione Scheduled Scraper di Thunderbit — descrivi l’URL e la frequenza, e il resto viene gestito senza bisogno di un server.

Per altri approcci, i nostri articoli su i migliori strumenti automatici di web scraping e su come estrarre dati dai siti web in Excel coprono ulteriori opzioni.

Una nota rapida su aspetti legali ed etici

Le Condizioni d’uso di Amazon vietano esplicitamente “l’uso di robot, spider, scraper o altri mezzi automatizzati per accedere ai servizi Amazon.” Detto questo, la giurisprudenza recente negli Stati Uniti è stata favorevole allo scraping di dati pubblici. In Meta Platforms v. Bright Data (gennaio 2024), un tribunale federale ha stabilito che lo scraping di dati accessibili pubblicamente non viola i termini di servizio quando lo scraper non è un “utente” autenticato.

La distinzione importante è questa: fare scraping dietro login (che è ciò che copre questo tutorial) ti porta nel campo del diritto contrattuale, perché hai accettato i ToS di Amazon quando hai creato l’account. Estrarre le featured reviews pubblicamente visibili comporta meno rischi legali rispetto allo scraping dietro il login wall.

Linee guida pratiche: non ridistribuire commercialmente i dati raccolti, non raccogliere dati personali oltre quelli già visibili pubblicamente, rispetta robots.txt e, per usi su larga scala o commerciali, consulta un legale. Questo non è un parere legale. Per saperne di più sul quadro normativo, vedi il nostro approfondimento su implicazioni legali del web scraping.

Conclusione: fai scraping delle recensioni Amazon con Python o elimina del tutto il codice

Ricapitolando cosa abbiamo visto in questa guida:

  • Il login wall esiste, ma si può superare con l’autenticazione basata sui cookie — copia 7 cookie dal browser e inseriscili in una requests.Session()
  • Usa selettori data-hook, non classi CSS, per un’estrazione che non si rompa ogni poche settimane
  • Combina filtri stelle e ordini per superare il limite di 10 pagine e arrivare a 500+ recensioni per prodotto
  • Aggiungi un’analisi del sentiment con TextBlob per una base rapida o con Hugging Face Transformers per una precisione da produzione
  • Tieni attive le difese anti-bot: throttling, rotazione User-Agent, exponential backoff e proxy residenziali quando serve scala

Python ti offre il controllo totale ed è il modo migliore per capire cosa succede sotto il cofano. Ma se il tuo bisogno è “mi servono i dati delle recensioni dei concorrenti in un foglio di calcolo entro venerdì” più che “voglio costruire una pipeline dati in produzione”, il costo di manutenzione di uno scraper custom potrebbe non valere lo sforzo.

Thunderbit gestisce autenticazione, selettori, paginazione ed export con pochi clic — prova il piano gratuito e vedi se si adatta al tuo flusso di lavoro. Mentre Amazon continua a rafforzare le misure anti-bot, gli strumenti basati su AI che si adattano in tempo reale passeranno da “optional interessante” a necessità vera e propria.

Puoi anche esplorare il nostro canale YouTube di Thunderbit per video tutorial sui flussi di scraping.

FAQ

1. Si possono estrarre le recensioni Amazon senza fare login?

Sì, ma solo le circa 8 “featured reviews” mostrate nella pagina dettaglio prodotto (/dp/{ASIN}/). Le pagine complete delle recensioni, con ordinamento, filtri e paginazione, richiedono l’autenticazione dalla fine del 2024. Per la maggior parte dei casi d’uso business, devi gestire il login wall.

2. È legale fare scraping delle recensioni Amazon?

I Termini di servizio di Amazon vietano lo scraping automatizzato. Tuttavia, la giurisprudenza recente negli Stati Uniti (Meta v. Bright Data, 2024; hiQ v. LinkedIn) supporta lo scraping di dati accessibili pubblicamente. Lo scraping dietro login comporta un rischio legale maggiore, perché hai accettato i ToS di Amazon. Per usi commerciali, consulta un legale.

3. Quante recensioni Amazon posso estrarre per prodotto?

Amazon limita le pagine recensioni a 10 per ogni combinazione di ordinamento e filtro stelle. Usando tutti e 5 i filtri stelle × 2 ordini, puoi accedere fino a 100 pagine (circa 1.000 recensioni) per prodotto. Con i filtri per parole chiave, il limite teorico è molto più alto, anche se con una duplicazione significativa.

4. Qual è la miglior libreria Python per estrarre recensioni Amazon?

requests + BeautifulSoup per il parsing dell’HTML statico è la combinazione più comune e affidabile. Selenium è utile quando è necessario il rendering JavaScript. Per un’alternativa no-code che gestisce automaticamente login wall e paginazione, prova Thunderbit.

5. Come posso evitare di essere bloccato أثناء lo scraping di Amazon?

Ruota le stringhe User-Agent scegliendole da un pool di 10+ browser reali, aggiungi ritardi casuali di 2–5 secondi tra le richieste, implementa exponential backoff sugli errori 503/429, usa proxy residenziali quando lavori su scala (gli IP dei datacenter vengono bloccati in anticipo) e mantieni cookie di sessione coerenti tra le richieste. Per un approccio senza manutenzione, Thunderbit gestisce automaticamente le difese anti-bot tramite la sessione del browser.

Scopri di più

Fawad Khan
Fawad Khan
Fawad scrive per lavoro e, a dirla tutta, gli piace parecchio. Ha passato anni a capire cosa rende un testo persuasivo e cosa invece fa scorrere oltre i lettori. Se gli parli di marketing, può andare avanti per ore. Se gli parli di carbonara, ancora di più.
Indice
Thunderbit · Agente AI per i dati web

Estrai dati da qualsiasi pagina in 1 clic

Scelto da oltre 250.000 utenti
piano gratuito disponibile
Dalla pagina web al foglio di calcolo
Descrivi ciò che ti serve — l’AI Agent di Thunderbit lo estrae ed esporta in Excel, Google Sheets, Airtable o Notion. Puoi iniziare gratis.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week