Come Estrarre Dati di Attività e Recensioni di Yelp per la Ricerca di Mercato

Yelp ha rafforzato la sua posizione anti-bot nell'ultimo anno e i suoi termini vietano esplicitamente lo scraping. Ecco come sono strutturati i dati, come gli IP residenziali geolocalizzati li raggiungono e le vie conformi da conoscere.

Yelp è una delle fonti più ricche di informazioni sulle attività locali - valutazioni, testo delle recensioni, dettagli di contatto e dati di categoria su milioni di elenchi. È anche uno dei bersagli più difficili da estrarre. I termini di Yelp vietano esplicitamente lo scraping e il sito ha rafforzato la sua posizione anti-bot in modo evidente nell'ultimo anno, quindi gli script casuali che funzionavano prima ora incontrano ostacoli. Questa guida copre come Yelp struttura i suoi dati, come i proxy residenziali geo-matched li raggiungono, i limiti pratici e le vie conformi da conoscere prima di costruire qualcosa.

Cosa vale la pena estrarre - e la realtà dei ToS

I campi di valore sono quelli ovvi: nome dell'attività, indirizzo, numero di telefono, valutazione a stelle, conteggio delle recensioni, categoria e il testo della recensione stessa con il sentimento del recensore. Aggregati su una metropoli, questi dati guidano l'analisi dei concorrenti, la dimensione del mercato locale e il monitoraggio del sentimento. Prima di iniziare, sii chiaro sulle regole. Le pagine di supporto di Yelp affermano che il sito non consente lo scraping, l'indicizzazione o l'estrazione dei suoi contenuti ai sensi della Sezione 6(b) dei suoi Termini di Servizio. Questo non rende la raccolta tecnicamente impossibile, ma significa che questo è un obiettivo in cui si valuta il valore rispetto ai termini, si preferiscono dati pubblici non personali e si mantiene il volume modesto. La nostra panoramica su legalità dello scraping web nel 2026 inquadra il quadro più ampio - e nulla di questo è un consiglio legale.

Come Yelp struttura i suoi dati

La cosa più utile da sapere: i dati che desideri sono raramente nell'HTML visibile. Yelp idrata le sue pagine da JSON incorporato nei tag <script> e le sue liste di recensioni si caricano da endpoint JSON interni. Quindi l'approccio affidabile è catturare il payload incorporato piuttosto che combattere selettori CSS fragili contro un DOM React:

import requests, re, json

proxy = "http://USER:PASS@us.quantumproxies.io:8000"  # geo-matched
proxies = {"http": proxy, "https": proxy}
headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
}

r = requests.get("https://www.yelp.com/biz/example-business-san-francisco",
                 headers=headers, proxies=proxies, timeout=25)

# Yelp embeds page state as JSON inside script tags
for blob in re.findall(r'<script[^>]+application/json[^>]*>(.*?)</script>', r.text, re.S):
    try:
        data = json.loads(blob)
    except ValueError:
        continue
    # inspect data for businessName, rating, reviewCount, phone

Le pagine delle recensioni si paginano con un offset start che incrementa a passi di circa dieci. Qui conta un limite pratico: la raccolta automatizzata di Yelp tende a fermarsi intorno a 240 risultati per ricerca, perché Yelp limita quanto in profondità va la sua paginazione dei risultati. Pianifica la tua copertura intorno a quel limite - segmenta per città, categoria e quartiere piuttosto che cercare di paginare all'infinito attraverso una query ampia:

def yelp_search(term, loc, cap=240):
    """Page a Yelp search via the `start` offset (steps of 10, ~240 ceiling)."""
    results = []
    for start in range(0, cap, 10):
        r = requests.get("https://www.yelp.com/search",
                         params={"find_desc": term, "find_loc": loc, "start": start},
                         headers=headers, proxies=proxies, timeout=25)
        page = parse_hydration(r.text)   # your JSON extractor from above
        if not page:
            break                          # empty page = end of results
        results.extend(page)
    return results

Due note di parsing risparmiano ore. Il testo delle recensioni di Yelp e i metadati dei recensori si trovano nel payload incorporato insieme ai campi dell'attività, quindi una volta individuato il giusto blob JSON raramente serve una seconda richiesta per pagina. E poiché il sito è un'app React, i nomi delle classi visibili cambiano spesso mentre lo schema dei dati incorporati è molto più stabile - ancora la tua estrazione alle chiavi JSON, non al DOM, e il tuo scraper sopravvive a ridisegni che rompono strumenti basati su selettori durante la notte.

Pipeline di scraping Yelp geo-consapevole che mostra un termine di ricerca e una città instradati attraverso un'uscita residenziale nella metropoli target, quindi analizzando il JSON di idratazione incorporato in righe di attività e recensioni
I risultati di Yelp sono specifici per località, quindi la città di uscita decide cosa vedi. Analizza il JSON incorporato, non l'HTML reso.

Il targeting geografico è tutto il gioco

Yelp è un prodotto locale, quindi i risultati dipendono fortemente da dove sembra provenire la richiesta. Una ricerca "caffè" servita a un'uscita di New York restituisce attività e ordinamenti diversi rispetto alla stessa ricerca da un'uscita di San Francisco. Se la tua ricerca mira a una metropoli specifica, il tuo proxy deve uscire in quella metropoli - qualsiasi altra cosa restituisce dati distorti. Un pool di proxy residenziali con targeting a livello di città in oltre 200 paesi ti consente di fissare l'uscita al mercato che stai analizzando, il che ti mantiene anche all'interno della fascia di fiducia che lo strato anti-bot di Yelp si aspetta per il traffico locale.

Il controllo geografico sblocca anche l'analisi più preziosa che Yelp supporta: confrontare la stessa categoria tra metropoli. Esegui una query - "caffè", "idraulici", "palestre" - in dieci città da dieci uscite residenziali corrispondenti e ottieni valutazioni medie, volume di recensioni e fascia di prezzo città per città. Quel dataset comparativo è la spina dorsale della dimensione del mercato locale, e nessuna estrazione da una singola località può produrlo.

Ottieni proxy residenziali geo-targeted

Superare la stretta anti-bot

Da quando Yelp ha rafforzato il rilevamento, tre cose separano un'esecuzione che si completa da una che si blocca su sfide. Usa IP residenziali corrispondenti alla geo target, non intervalli di datacenter. Invia un set completo e coerente di intestazioni del browser - un vero User-Agent di Chrome o Safari con Accept e Accept-Language corrispondenti, non una stringa predefinita della libreria. E procedi con cautela con jitter, perché i picchi da un IP sono il trigger più veloce. Quando Yelp passa a sfide JavaScript o CAPTCHA comunque, è il segnale per smettere di fare tutto a mano e affidare la pagina a una Scraper API che rende JavaScript, porta un'impronta digitale reale del browser e ruota gli IP per te - di solito un tasso di successo più alto con meno codice.

Tre modi per ottenere dati Yelp a confronto - scraping di pagine pubbliche, l'API ufficiale Fusion e il dataset aperto - valutati per scala, freschezza e conformità
Valuta tre vie prima di costruire: scraping flessibile, l'API Fusion autorizzata o il dataset aperto ma statico.

Alternative conformi da conoscere

Prima di impegnarti nello scraping, valuta due vie autorizzate. L'API ufficiale Fusion di Yelp restituisce dettagli sulle attività e una fetta ridotta di dati delle recensioni sotto una chiave API e limiti di velocità - minore flessibilità, ma nessun attrito con i ToS. E Yelp pubblica un dataset aperto di milioni di recensioni, foto e attributi delle attività per uso di ricerca sotto la propria licenza; è uno snapshot statico piuttosto che dati live, ma per l'addestramento di modelli o analisi storiche è spesso tutto ciò di cui hai bisogno. Per il monitoraggio live dei concorrenti e delle recensioni attraverso le fonti, le stesse tecniche si trasferiscono ai dati delle attività di Google Maps, alle recensioni di Trustpilot e a TripAdvisor.

Domande frequenti

È legale estrarre dati da Yelp?

I Termini di Servizio di Yelp proibiscono esplicitamente lo scraping, l'indicizzazione e l'estrazione dei suoi contenuti, quindi la raccolta avviene contro le regole dichiarate del sito anche quando si mira a pagine pubbliche. I nomi dei recensori sono anche dati personali ai sensi del GDPR e di leggi simili. Preferisci l'API Fusion o il dataset aperto dove si adattano, mantieni il volume modesto e consulta un avvocato per qualsiasi cosa su larga scala. Questo non è un consiglio legale.

Quanti risultati puoi estrarre per ricerca su Yelp?

Circa 240 attività per ricerca in media, perché Yelp limita quanto in profondità va la sua paginazione dei risultati. Per coprire completamente un mercato, segmenta le tue query per città, categoria e quartiere piuttosto che paginare attraverso una ricerca ampia - molte query strette battono una profonda.

Perché ottengo risultati Yelp diversi da server diversi?

Perché Yelp è consapevole della localizzazione e personalizza i risultati in base alla geografia dell'IP richiedente. Una ricerca eseguita da una città o paese diverso restituisce attività e ordinamenti diversi. Per una ricerca locale accurata, usa un proxy residenziale che esce esattamente nella metropoli che stai analizzando.

Dove si trovano i dati su una pagina Yelp?

Principalmente in JSON incorporato, non nell'HTML visibile. Yelp idrata le sue pagine React da JSON all'interno dei tag &lt;script&gt; e carica le recensioni da endpoint JSON interni, quindi analizzare il payload incorporato è più affidabile che abbinare selettori CSS contro un DOM che cambia spesso.

Yelp è estraibile con l'approccio giusto - analizza il JSON incorporato, esci dalla metropoli target su IP residenziali, rispetta il limite di ~240 per ricerca e procedi con cautela. Ma valuta contro i termini di Yelp e l'API Fusion conforme e il dataset aperto prima. Quando lo strato anti-bot si intensifica, una Scraper API gestita è il passo pragmatico successivo.

Estrai obiettivi locali difficili con la Scraper API