How to scrape Glassdoor - reviews and salary data with Python and proxies - DataImpulse

Esta guía muestra cómo hacer scraping de Glassdoor con Python — reseñas de empresas y datos salariales agregados — y, igual de importante, dónde están los límites legales y técnicos. Glassdoor es un objetivo difícil: renderiza contenido con JavaScript, se defiende agresivamente contra bots y bloquea gran parte de sus datos detrás de un registro. Por eso, un scraper de Glassdoor necesita un navegador real (Playwright), proxies residenciales y una regla clara para mantenerse del lado correcto: limitarse a páginas públicas, minimizar lo que almacenas y nunca eludir el inicio de sesión, además de saber que los términos de Glassdoor restringen el acceso automatizado desde el principio.

Soy Andrii Byzov, un CMO fraccional nativo en IA que crea pipelines de datos web. A continuación: qué puedes y qué no puedes extraer de Glassdoor, las advertencias legales desde el inicio y patrones de código funcionales para las páginas públicas de reseñas y salarios.


Datos clave

  • Glassdoor se renderiza con JavaScript y cuenta con defensas robustasrequests simple suele ser insuficiente; normalmente necesitas un navegador headless como Playwright.
  • Los términos de Glassdoor restringen el acceso automatizado sin permiso por escrito — por lo que incluso el scraping público, sin iniciar sesión, puede infringir sus ToS. El muro de inicio de sesión es un riesgo adicional, no la única barrera.
  • Las reseñas son contenido generado por usuarios y semipersonal — Glassdoor mismo afirma que el anonimato no está garantizado. Minimiza lo que conservas, no almacenes identidades y no republices el texto de las reseñas.
  • Los proxies residenciales ayudan a escala — Glassdoor limita la tasa y marca rápidamente las IPs de centros de datos — pero ninguna herramienta garantiza el acceso ni hace que el scraping sea conforme.
  • Trata esto como material educativo. Para cualquier uso comercial o a escala, obtén el permiso de Glassdoor y asesoría legal.

Qué puedes y qué no puedes extraer de Glassdoor

Definir este límite desde el principio es lo que mantiene un proyecto de scraping de Glassdoor lo más defendible posible, y es la decisión más importante en cualquier flujo de trabajo de scraping de Glassdoor.

  • Menor riesgo (público, no personal): la calificación general de una empresa y los rangos salariales agregados por puesto: las cifras principales que Glassdoor muestra sin una cuenta.
  • Usar con precaución (público pero sensible): los fragmentos de reseñas (calificación, texto de pros/contras) son públicos, pero generados por usuarios y semipersonales. Si los recopilas, minimiza: conserva la señal agregada, elimina identidades y nunca vuelvas a publicar el texto.
  • Fuera de los límites: cualquier cosa detrás del muro de inicio de sesión/registro, identidades de los autores de reseñas o cualquier dato personal, y volver a publicar contenido de reseñas. No eludas la barrera de “iniciar sesión para leer más”.
Scraping de Glassdoor: qué es aceptable y qué está fuera de los límites: lo de menor riesgo son las calificaciones públicas y los rangos salariales agregados; lo que está fuera de los límites es cualquier cosa detrás del inicio de sesión, identidades de autores de reseñas, volver a publicar texto de reseñas o eludir la barrera de inicio de sesión

¿Es legal hacer scraping de Glassdoor?

Depende, y aquí las advertencias importan más que en la mayoría de los sitios. Los términos de servicio de Glassdoor restringen el acceso automatizado sin permiso por escrito, por lo que incluso hacer scraping de páginas públicas sin sesión iniciada puede infringir sus ToS; el muro de inicio de sesión es un riesgo adicional, no el único. Además, gran parte del contenido requiere inicio de sesión y las reseñas son contenido generado por usuarios que implica consideraciones de derechos de autor y privacidad. El enfoque de menor riesgo: mantente sin iniciar sesión, prefiere datos agregados públicos (calificaciones, rangos salariales), minimiza y no almacenes datos personales, respeta robots.txt y los límites de tasa, no vuelvas a publicar texto de reseñas, y obtén permiso de Glassdoor para cualquier uso comercial. Para conocer el marco completo, consulta nuestra guía sobre si el web scraping es legal. Esta es información general, no asesoría legal; consulta con un abogado antes de cualquier proyecto comercial de datos de Glassdoor.


Paso 1 — Configura tu entorno

Debido a que Glassdoor utiliza mucho JavaScript, el scraper controla un navegador real mediante Playwright en lugar de enviar solicitudes HTTP sin procesar.



# Glassdoor renders content with JavaScript and defends hard, so use a
# real browser (Playwright) rather than plain requests.
pip install playwright beautifulsoup4
playwright install chromium




Paso 2 — Cargar una página pública de Glassdoor

Inicia un Chromium sin interfaz gráfica mediante un proxy residencial y carga una URL pública de reseñas de empresa, sin iniciar sesión. El navegador ejecuta el JavaScript de la página para que las reseñas se rendericen antes de que leas el HTML.



from playwright.sync_api import sync_playwright

# Route the browser through a residential proxy (see Step 4)
PROXY = {"server": "http://gw.dataimpulse.com:823",
         "username": "YOUR_DI_LOGIN", "password": "YOUR_DI_PASSWORD"}

def get_html(url):
    with sync_playwright() as p:
        browser = p.chromium.launch(proxy=PROXY, headless=True)
        page = browser.new_page(locale="en-US")
        page.goto(url, wait_until="networkidle", timeout=60000)
        html = page.content()
        browser.close()
        return html

# A PUBLIC company reviews page (do not log in)
html = get_html("https://www.glassdoor.com/Reviews/Example-Company-Reviews-E12345.htm")

















Paso 3 — Extrae reseñas públicas de Glassdoor

Para extraer reseñas de Glassdoor, analiza las tarjetas de reseñas visibles públicamente en campos estructurados — calificación, título, pros, contras, fecha. Los nombres de clases de Glassdoor están ofuscados y cambian con frecuencia, así que confirma los selectores actuales en DevTools; los atributos data-test a continuación son ilustrativos.



from bs4 import BeautifulSoup

def parse_reviews(html):
    """Parse the publicly visible reviews. Selectors change often —
    confirm the current ones in DevTools before relying on them."""
    soup = BeautifulSoup(html, "html.parser")
    reviews = []
    for card in soup.select('[data-test="review-details"]'):
        def t(sel):
            el = card.select_one(sel)
            return el.get_text(strip=True) if el else None
        reviews.append({
            "rating": t('[data-test="review-rating"]'),
            "title":  t('[data-test="review-title"]'),
            "pros":   t('[data-test="pros"]'),
            "cons":   t('[data-test="cons"]'),
            "date":   t('[data-test="review-date"]'),
        })
    return reviews

print(parse_reviews(html)[:3])





















Paso 4 — Extraer datos salariales agregados

Las páginas de salarios de Glassdoor muestran cifras agregadas por puesto — salario base mediano y rangos, no individuos. Esa vista pública y agregada es lo correcto para recopilar; extráela de la misma manera.



def parse_salaries(html):
    """Parse aggregated, public salary ranges (role-level, not individuals)."""
    soup = BeautifulSoup(html, "html.parser")
    rows = []
    for row in soup.select('[data-test="salary-row"]'):
        def t(sel):
            el = row.select_one(sel)
            return el.get_text(strip=True) if el else None
        rows.append({
            "job_title": t('[data-test="job-title"]'),
            "base_pay":  t('[data-test="median-base"]'),
            "range":     t('[data-test="pay-range"]'),
        })
    return rows

salary_html = get_html("https://www.glassdoor.com/Salaries/example-company-salaries-E12345.htm")
print(parse_salaries(salary_html)[:3])

















Paso 5 — Superar las defensas anti-bot de Glassdoor

Glassdoor utiliza una pila anti-bot agresiva: puntuación de reputación de IP, limitación de velocidad y desafíos de detección de bots. No existe una omisión garantizada, y un navegador más proxies no hace que el scraping sea conforme, pero dos cosas reducen los bloqueos en páginas públicas: un contexto de navegador real con encabezados realistas y proxies residenciales rotativos para que ninguna IP individual se agote. Las IP de centros de datos se marcan rápidamente aquí; DataImpulse residential proxies ($1/GB, rotativos, 195 países) se leen como usuarios reales. Modera el ritmo de tus solicitudes: bombardear Glassdoor hace que te bloqueen y aumenta los problemas de carga del servidor que debilitan tu posición legal.



# Rotate residential IPs and look like a real browser.
# Use a fresh session id per run so each crawl gets a clean IP.
PROXY = {"server": "http://gw.dataimpulse.com:823",
         "username": "YOUR_DI_LOGIN__cr.us;sid.run1",
         "password": "YOUR_DI_PASSWORD"}

def fetch(url):
    with sync_playwright() as p:
        browser = p.chromium.launch(proxy=PROXY, headless=True)
        ctx = browser.new_context(
            locale="en-US",
            user_agent=("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                        "(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"),
            viewport={"width": 1366, "height": 900},
        )
        page = ctx.new_page()
        page.goto(url, wait_until="networkidle")  # pace requests; Glassdoor rate-limits
        html = page.content()
        browser.close()        # always clean up the browser
        return html




















Paso 6 — Exporta tus datos

Guarda los datos públicos y agregados que recopilaste en JSON y CSV. Mantén los datos personales fuera: almacena calificaciones y texto agregado, no identidades de los reseñadores.



import json, csv

reviews = parse_reviews(html)

with open("glassdoor_reviews.json", "w", encoding="utf-8") as f:
    json.dump(reviews, f, indent=2, ensure_ascii=False)

if reviews:
    with open("glassdoor_reviews.csv", "w", newline="", encoding="utf-8") as f:
        w = csv.DictWriter(f, fieldnames=reviews[0].keys())
        w.writeheader(); w.writerows(reviews)











Preguntas frecuentes

¿Es legal hacer scraping de Glassdoor?

Depende, y las salvedades son reales: los términos de Glassdoor restringen el acceso automatizado sin permiso por escrito, por lo que incluso hacer scraping de páginas públicas puede infringir sus ToS; gran parte del sitio requiere inicio de sesión, y las reseñas son contenido de usuario protegido por derechos de autor y semipersonal. Si decides continuar, el enfoque de menor riesgo es usar solo datos agregados públicos (calificaciones, rangos salariales), sin iniciar sesión, de forma minimizada, sin republicarlos, y obtener permiso/asesoría legal para uso comercial. Esta es información general, no asesoría legal; consulta nuestra guía sobre la legalidad del web scraping.

¿Puedo hacer scraping de Glassdoor sin iniciar sesión?

Sí, y deberías mantenerte sin iniciar sesión. Glassdoor muestra públicamente algunas calificaciones de empresas, fragmentos de reseñas y datos salariales agregados. Hacer scraping detrás del inicio de sesión implica infringir los términos que aceptas al acceder, que es la zona de riesgo. Recopila solo lo que sea visible sin una cuenta.

¿Por qué un script simple de requests no funciona en Glassdoor?

Glassdoor renderiza contenido con JavaScript y ejecuta detección de bots, por lo que una solicitud HTTP simple devuelve pocos datos útiles o una página de desafío. Necesitas un navegador headless (Playwright o similar) que ejecute el JS de la página, además de proxies residenciales para evitar que te marquen.

¿Necesito proxies para hacer scraping de Glassdoor?

Para más que unas pocas páginas, sí. Glassdoor limita la tasa de solicitudes y marca rápidamente las IPs de datacenter, por lo que una sola IP se bloquea rápido. Los proxies residenciales rotativos distribuyen las solicitudes entre muchas IPs de usuarios reales y te permiten recopilar a escala sin activar las defensas.

¿Puedo hacer scraping de salarios individuales o nombres de reseñadores?

No, y no deberías hacerlo. Los datos salariales de Glassdoor están pensados para leerse de forma agregada (medianas y rangos por puesto), y las identidades de los reseñadores son datos personales que entran en una zona regulada. Recopila solo señales agregadas y no personales.


Conclusión

Hacer scraping de Glassdoor es posible, pero tiene limitaciones: es un sitio renderizado con JavaScript y bien protegido, donde la mayor parte del valor está restringida, por lo que un scraper funcional para Glassdoor necesita un navegador headless y proxies residenciales rotativos, además de una regla firme: recopilar solo datos públicos, no personales y agregados, sin eludir el inicio de sesión. Configura correctamente la capa técnica con Playwright más proxies residenciales, mantente dentro de un enfoque defendible y consulta nuestra guía de mejores proxies para web scraping para una configuración más amplia.

Última actualización: June 25, 2026.




Share article: