Cómo extraer datos de negocios y reseñas de Yelp para investigación de mercado

Yelp endureció su postura anti-bot en el último año y sus términos prohíben la extracción de datos de manera explícita. Aquí se explica cómo están estructurados los datos, cómo los IPs residenciales geolocalizados los alcanzan, y las rutas compatibles que vale la pena conocer.

Yelp es una de las fuentes más ricas de inteligencia de negocios locales: calificaciones, texto de reseñas, detalles de contacto y datos de categoría en millones de listados. También es uno de los objetivos más complicados para extraer datos. Los términos de Yelp prohíben la extracción de datos de manera explícita, y el sitio endureció su postura anti-bot notablemente en el último año, por lo que los scripts casuales que funcionaban antes ahora encuentran obstáculos. Esta guía cubre cómo Yelp estructura sus datos, cómo los proxies residenciales geolocalizados los alcanzan, los límites prácticos y las rutas compatibles que vale la pena conocer antes de construir algo.

Qué vale la pena extraer - y la realidad de los ToS

Los campos valiosos son los obvios: nombre del negocio, dirección, número de teléfono, calificación por estrellas, cantidad de reseñas, categoría y el texto de la reseña en sí con el sentimiento del revisor. Agregado a través de una metrópoli, esos datos impulsan el análisis de la competencia, la dimensionamiento del mercado local y el seguimiento del sentimiento. Antes de comenzar, ten claro las reglas. Las propias páginas de soporte de Yelp indican que el sitio no permite la extracción, indexación o minería de su contenido bajo la Sección 6(b) de sus Términos de Servicio. Eso no hace que la recolección sea técnicamente imposible, pero sí significa que este es un objetivo donde se debe sopesar el valor contra los términos, preferir datos públicos no personales y mantener el volumen modesto. Nuestro resumen de la legalidad de la extracción de datos web en 2026 enmarca el panorama más amplio, y nada de esto es un consejo legal.

Cómo Yelp estructura sus datos

Lo más útil de saber: los datos que deseas rara vez están en el HTML visible. Yelp hidrata sus páginas desde JSON incrustado en etiquetas <script>, y sus listas de reseñas se cargan desde endpoints internos de JSON. Así que el enfoque confiable es capturar la carga incrustada en lugar de luchar contra selectores CSS frágiles en un DOM de 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

Las páginas de reseñas se paginan con un desplazamiento start que incrementa en pasos de aproximadamente diez. Aquí importa un techo práctico: la recolección automatizada de Yelp tiende a alcanzar un máximo de alrededor de 240 resultados por búsqueda, porque Yelp limita cuán profundo va su propia paginación de resultados. Planifica tu cobertura en torno a ese límite: segmenta por ciudad, categoría y vecindario en lugar de intentar paginar interminablemente a través de una consulta amplia:

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

Dos notas de análisis ahorran horas. El texto de las reseñas de Yelp y los metadatos del revisor se encuentran en la carga incrustada junto a los campos del negocio, por lo que una vez que has localizado el JSON correcto, rara vez necesitas una segunda solicitud por página. Y debido a que el sitio es una aplicación React, los nombres de clase visibles cambian a menudo, mientras que el esquema de datos incrustados es mucho más estable: ancla tu extracción a las claves JSON, no al DOM, y tu scraper sobrevivirá a rediseños que rompen herramientas basadas en selectores de la noche a la mañana.

Pipeline de extracción de Yelp consciente de la geolocalización que muestra un término de búsqueda y ciudad enrutados a través de una salida residencial en la metrópoli objetivo, luego analizando el JSON de hidratación incrustado en filas de negocios y reseñas
Los resultados de Yelp son específicos de la ubicación, por lo que la ciudad de salida decide lo que ves. Analiza el JSON incrustado, no el HTML renderizado.

El geotargeting es el juego completo

Yelp es un producto local, por lo que los resultados dependen en gran medida de dónde parece provenir la solicitud. Una búsqueda de "café" servida a una salida de Nueva York devuelve diferentes negocios y ordenamiento que la misma búsqueda desde una salida de San Francisco. Si tu investigación apunta a una metrópoli específica, tu proxy debe salir en esa metrópoli; cualquier otra cosa devuelve datos sesgados. Un pool de proxies residenciales con targeting a nivel de ciudad en más de 200 países te permite fijar la salida al mercado que estás analizando, lo que también te mantiene dentro de la banda de confianza que la capa anti-bot de Yelp espera para el tráfico local.

El control geográfico también desbloquea el análisis más valioso que Yelp admite: comparar la misma categoría a través de metrópolis. Ejecuta una consulta - "café", "plomeros", "gimnasios" - en diez ciudades desde diez salidas residenciales coincidentes y obtienes calificaciones promedio, volumen de reseñas y nivel de precios ciudad por ciudad. Ese conjunto de datos comparativo es la columna vertebral del dimensionamiento del mercado local, y ninguna extracción de una sola ubicación puede producirlo.

Obtén proxies residenciales geotargeteados

Superando la represión anti-bot

Desde que Yelp endureció la detección, tres cosas separan una ejecución que se completa de una que se detiene en desafíos. Usa IPs residenciales coincidentes con la geolocalización objetivo, no rangos de centros de datos. Envía un conjunto completo y coherente de encabezados de navegador: un User-Agent real de Chrome o Safari con Accept y Accept-Language coincidentes, no una cadena de biblioteca predeterminada. Y marca el ritmo de manera conservadora con jitter, porque los picos desde una IP son el desencadenante más rápido. Cuando Yelp escala a desafíos de JavaScript o CAPTCHAs de todos modos, esa es la señal para dejar de hacer todo manualmente y entregar la página a una Scraper API que renderiza JavaScript, lleva una huella digital de navegador real y rota IPs por ti, generalmente una tasa de éxito más alta con menos código.

Tres formas de obtener datos de Yelp comparadas: extracción de páginas públicas, la API oficial Fusion y el conjunto de datos abierto, ponderadas por escala, frescura y cumplimiento
Sopesa tres rutas antes de construir: extracción flexible, la API Fusion sancionada o el conjunto de datos abierto pero estático.

Alternativas compatibles que vale la pena conocer

Antes de comprometerte a extraer datos, sopesa dos rutas sancionadas. La API oficial Fusion de Yelp devuelve detalles de negocios y una porción recortada de datos de reseñas bajo una clave de API y límites de tasa: menor flexibilidad, pero sin fricción con los ToS. Y Yelp publica un conjunto de datos abierto de millones de reseñas, fotos y atributos de negocios para uso en investigación bajo su propia licencia; es una instantánea estática en lugar de datos en vivo, pero para entrenamiento de modelos o análisis histórico, a menudo es todo lo que necesitas. Para monitoreo en vivo de la competencia y reseñas a través de fuentes, las mismas técnicas se transfieren a datos de negocios de Google Maps, reseñas de Trustpilot y TripAdvisor.

Preguntas frecuentes

¿Es legal extraer datos de Yelp?

Los Términos de Servicio de Yelp prohíben explícitamente la extracción, indexación y minería de su contenido, por lo que la recolección ocurre en contra de las reglas declaradas del sitio incluso cuando se dirige a páginas públicas. Los nombres de los revisores también son datos personales bajo el GDPR y leyes similares. Prefiere la API Fusion o el conjunto de datos abierto donde encajen, mantén el volumen modesto y consulta a un abogado para cualquier cosa a gran escala. Esto no es un consejo legal.

¿Cuántos resultados puedes extraer por búsqueda en Yelp?

Aproximadamente 240 negocios por búsqueda en promedio, porque Yelp limita cuán profundo va su paginación de resultados. Para cubrir completamente un mercado, segmenta tus consultas por ciudad, categoría y vecindario en lugar de paginar a través de una búsqueda amplia: muchas consultas estrechas superan a una profunda.

¿Por qué obtengo diferentes resultados de Yelp desde diferentes servidores?

Porque Yelp es consciente de la ubicación y personaliza los resultados según la geografía del IP solicitante. Una búsqueda realizada desde una ciudad o país diferente devuelve diferentes negocios y ordenamiento. Para una investigación local precisa, usa un proxy residencial que salga en la metrópoli exacta que estás analizando.

¿Dónde están los datos en una página de Yelp?

Principalmente en JSON incrustado, no en el HTML visible. Yelp hidrata sus páginas React desde JSON dentro de etiquetas &lt;script&gt; y carga reseñas desde endpoints internos de JSON, por lo que analizar la carga incrustada es más confiable que coincidir selectores CSS contra un DOM que cambia a menudo.

Yelp es extraíble con el enfoque correcto: analiza el JSON incrustado, sal desde la metrópoli objetivo en IPs residenciales, respeta el límite de ~240 por búsqueda y marca el ritmo de manera conservadora. Pero sopésalo contra los términos de Yelp y la API Fusion y el conjunto de datos abierto compatibles primero. Cuando la capa anti-bot escala, una Scraper API gestionada es el siguiente paso pragmático.

Extrae objetivos locales difíciles con la Scraper API