Come estrarre stipendi e recensioni da Glassdoor per il benchmarking delle compensazioni
Glassdoor nasconde i suoi dati dietro un overlay di login, ma il contenuto è già nel JSON della pagina, sotto il modale. Ecco come trovare un ID datore di lavoro, leggere quel JSON e fare benchmarking delle compensazioni senza incorrere nel blocco.
Glassdoor è il dataset di riferimento per la ricerca su compensazioni e reputazione dei datori di lavoro - stipendi, valutazioni e recensioni su milioni di aziende. Inoltre, presenta un overlay di login e limita le richieste in modo aggressivo. Il trucco che molti non vedono: quell'overlay è cosmetico. I dati aziendali sono già caricati nel JSON della pagina, sotto il modale. Questa guida mostra come estrarre stipendi e recensioni da Glassdoor per il benchmarking delle compensazioni - risolvi un ID datore di lavoro, leggi il JSON e regola le richieste per non incorrere nel muro 403.
Passo 1: risolvi l'azienda in un ID datore di lavoro
Ogni pagina di Glassdoor si basa su un ID numerico del datore di lavoro, non su un nome. C'è un endpoint interno di typeahead che mappa un nome aziendale al suo ID - lo stesso che alimenta la casella di ricerca. Usalo e otterrai il nome canonico più l'ID necessario per costruire ogni altro URL:
import requests
proxy = "http://USER:PASS@gate.quantumproxies.io:8000"
proxies = {"http": proxy, "https": proxy}
def find_employer_id(name):
url = "https://www.glassdoor.com/api-web/employer/find.htm"
params = {"autocomplete": "true", "maxEmployersForAutocomplete": 10, "term": name}
r = requests.get(url, params=params, proxies=proxies, timeout=15,
headers={"User-Agent": "Mozilla/5.0"})
return r.json() # -> [{"id": 7853, "shortName": "eBay", ...}, ...]
print(find_employer_id("eBay"))
Con l'ID puoi costruire l'URL panoramica (/Overview/Working-at-NAME-EI_IE{id}.htm) e l'URL delle recensioni (/Reviews/NAME-Reviews-E{id}.htm). Non è ancora necessario un browser.

Passo 2: leggi il JSON, non l'HTML
Glassdoor è un'app Next.js, quindi ogni pagina trasmette i suoi dati come un blob JSON - nel tag script __NEXT_DATA__ e in una cache Apollo GraphQL. Analizza quello invece di estrarre il DOM renderizzato: contiene valutazioni, cifre salariali, testo delle recensioni, oltre a dati firmografici come entrate, sede centrale, dimensioni dell'azienda, anno di fondazione e settore. È molto più stabile dei selettori CSS, che Glassdoor ruota dietro attributi data-test.
import json, re
def scrape_overview(name, employer_id):
url = f"https://www.glassdoor.com/Overview/Working-at-{name}-EI_IE{employer_id}.htm"
r = requests.get(url, proxies=proxies, timeout=20,
headers={"User-Agent": "Mozilla/5.0"})
m = re.search(r'<script id="__NEXT_DATA__"[^>]*>(.*?)</script>', r.text, re.S)
data = json.loads(m.group(1))
# firmographics + ratings live inside the Apollo cache under props
return data["props"]["pageProps"]
data = scrape_overview("eBay", 7853)
Il modale di login che vedi in un browser è un overlay fisso (il suo id contenitore è HardsellOverlay) disegnato sopra la pagina. Poiché il contenuto sottostante è già nel DOM e nel JSON, una richiesta HTTP che legge il markup grezzo non vede mai il modale. Se esegui il rendering con un browser, puoi eliminare l'overlay con un'iniezione CSS a riga singola (display:none) invece di provare a effettuare il login.
Paginazione delle recensioni e lettura delle distribuzioni salariali
Le recensioni e gli stipendi sono paginati, e il cursore di paginazione si trova nello stesso JSON che hai già analizzato - non in un fragile pulsante "successivo" che devi cliccare. Leggi i dati della pagina corrente, trova il cursore o il numero di pagina nel payload e richiedi direttamente l'URL della pagina successiva. Questo è il motivo per cui analizzare il JSON è meglio che guidare un browser: navighi tra le pagine con semplici richieste HTTP, una per pagina, al ritmo che preferisci. Estrai il corpo della recensione, la valutazione con stelle, il titolo del lavoro, la posizione e la data per ogni voce, e avrai un corpus di recensioni strutturato su cui puoi eseguire analisi del sentiment - lo stesso materiale grezzo trattato nella nostra guida all'estrazione delle recensioni.
Gli stipendi sono l'obiettivo di maggior valore, e il consiglio onesto è di trattarli come distribuzioni, non valori puntuali. Una singola cifra estratta è rumorosa; il segnale utile è l'intervallo e la mediana tra molte sottomissioni per un ruolo in una data località. Il JSON espone i numeri di cui hai bisogno - paga base, il conteggio del campione dietro ogni stima, valuta e località - quindi aggregali tu stesso piuttosto che fidarti di un solo numero. Pesa in base alla dimensione del campione, elimina i ruoli con troppi pochi dati per essere significativi, e associa sempre uno stipendio alla sua località e alla data in cui è stato raccolto - idealmente tramite un exit residenziale in quel mercato - perché i benchmark delle compensazioni diventano obsoleti e variano notevolmente a seconda del mercato. Quella disciplina è ciò che trasforma le righe estratte in un benchmark che un team di assunzione o finanziario può effettivamente difendere. Protegge anche dal classico errore di citare una singola cifra appariscente che si scopre essere basata su due sottomissioni di tre anni fa.
Passo 3: imposta la regione in modo che i dati corrispondano al tuo mercato
Glassdoor localizza stipendi e contenuti per regione tramite un cookie tldp: 1 è gli Stati Uniti, 2 il Regno Unito, 3 il Canada, 4 l'India, 5 l'Australia, 6 la Francia, 7 la Germania. Impostalo per fare benchmarking delle compensazioni nel mercato che ti interessa veramente - una cifra salariale statunitense è priva di significato per un ruolo nel Regno Unito. Abbina il cookie a un exit proxy nel paese corrispondente in modo che la richiesta sia coerente dall'inizio alla fine. La nostra guida alla raccolta dati B2B copre il mantenimento di segnali geografici coerenti lungo una pipeline.
Ottieni proxy residenziali geo-targetizzati
Gestione del limite di velocità 403
Glassdoor risponde all'estrazione aggressiva con HTTP 403, non un CAPTCHA. Tratta un 403 come un segnale di ritmo, non un vicolo cieco: rallenta esponenzialmente, ruota su un IP fresco e rallenta il tuo tasso complessivo. Un singolo IP di datacenter che attraversa la paginazione delle recensioni viene limitato entro una o due pagine; distribuire le richieste su un pool residenziale e fare pause tra di esse ti mantiene sotto il radar.
import time, random
def get_with_backoff(url, tries=4):
for attempt in range(tries):
r = requests.get(url, proxies=proxies, timeout=20,
headers={"User-Agent": "Mozilla/5.0"})
if r.status_code == 200:
return r
if r.status_code == 403: # rate-limited: pace + rotate
wait = (2 ** attempt) + random.random()
time.sleep(wait) # rotating gateway gives a new IP
return None
Una breve parola su etica e legge: fai benchmarking in aggregato. Gli stipendi e le valutazioni sono utili come distribuzioni; le recensioni individuali collegate a persone identificabili sono dati personali, quindi non ricostruire profili di recensori e rispetta i Termini di Glassdoor e le direttive dei robots. Questa è una guida, non un consiglio legale - verifica la tua giurisdizione. La nostra panoramica sulla legalità dell'estrazione dati nel 2026 approfondisce ulteriormente.

Domande frequenti
Come posso estrarre recensioni da Glassdoor con Python?
Risolvi l'azienda al suo ID datore di lavoro tramite l'endpoint interno di typeahead, costruisci l'URL delle recensioni con quell'ID, quindi analizza il JSON __NEXT_DATA__ nella pagina piuttosto che l'HTML. Instrada le richieste tramite proxy residenziali e rallenta su qualsiasi 403. Il testo delle recensioni, le valutazioni e i cursori di paginazione si trovano tutti in quel payload JSON.
Posso superare il muro di login di Glassdoor?
Di solito non è necessario. Il prompt di login è un overlay cosmetico disegnato sopra il contenuto già caricato nella pagina e nel suo JSON. Una semplice richiesta HTTP che legge il markup grezzo non renderizza mai il modale. Se usi un browser reale, nascondi l'overlay con un'iniezione CSS display:none invece di effettuare il login.
Perché Glassdoor restituisce errori 403?
Un 403 è Glassdoor che ti limita il ritmo, tipicamente perché troppe richieste sono arrivate da un IP troppo velocemente. Rallenta, aggiungi un backoff esponenziale e ruota attraverso un pool di proxy residenziali in modo che le richieste si distribuiscano su molti IP. È un problema di ritmo, non un blocco permanente - un tempismo costante e simile a quello umano lo risolve.
È legale estrarre dati da Glassdoor?
Raccogliere dati aziendali pubblici e aggregati per il benchmarking è generalmente a basso rischio, ma i Termini di Glassdoor limitano l'accesso automatizzato e le recensioni individuali possono essere dati personali. Mantienilo aggregato, non ricostruire persone identificabili e rispetta i robots e i Termini. Questo è un orientamento generale, non un consiglio legale - valuta il tuo caso d'uso.
L'intero lavoro si riduce a tre mosse: risolvi l'ID datore di lavoro, leggi il JSON che la pagina contiene già e regola le richieste su IP puliti in modo che i 403 siano rari. Fai questo e Glassdoor diventa un feed di benchmarking delle compensazioni in tempo reale invece di un muro di login su cui continui a rimbalzare.