Cómo hacer Web Scrape de Yelp.com (Actualización 2023) - Guía paso a paso
Raluca Penciuc el 03 mar 2023

Yelp es una plataforma que permite a los usuarios buscar negocios, leer opiniones e incluso hacer reservas. Es un sitio web popular con millones de visitantes mensuales, lo que lo convierte en un objetivo ideal para el raspado de datos.
Saber cómo hacer web scrape de Yelp puede ser una poderosa herramienta para las empresas y los empresarios que buscan recopilar información valiosa sobre el mercado local.
En este artículo, exploraremos las ventajas del web scraping de Yelp, incluyendo información sobre cómo configurar el entorno, localizar los datos y extraer información valiosa.
También veremos las posibles ideas de negocio que se pueden crear utilizando estos datos raspados, y por qué es mejor utilizar un raspador profesional que crear uno propio. Al final de este artículo, usted tendrá una sólida comprensión de cómo web scrape Yelp.
Configuración del entorno
Antes de empezar, asegurémonos de que disponemos de las herramientas necesarias.
En primer lugar, descarga e instala Node.js desde el sitio web oficial, asegurándote de utilizar la versión Long-Term Support (LTS). Esto también instalará automáticamente Node Package Manager (NPM), que utilizaremos para instalar otras dependencias.
Para este tutorial, usaremos Visual Studio Code como nuestro Entorno de Desarrollo Integrado (IDE) pero puedes usar cualquier otro IDE de tu elección. Crea una nueva carpeta para tu proyecto, abre el terminal y ejecuta el siguiente comando para configurar un nuevo proyecto Node.js:
npm init -y
Esto creará un archivo package.json en el directorio de su proyecto, que almacenará información sobre su proyecto y sus dependencias.
A continuación, tenemos que instalar TypeScript y las definiciones de tipo para Node.js. TypeScript ofrece tipado estático opcional que ayuda a prevenir errores en el código. Para ello, ejecuta en el terminal
npm install typescript @types/node --save-dev
Puede verificar la instalación ejecutando:
npx tsc --version
TypeScript utiliza un archivo de configuración llamado tsconfig.json para almacenar las opciones del compilador y otros ajustes. Para crear este archivo en su proyecto, ejecute el siguiente comando:
npx tsc -init
Asegúrate de que el valor de "outDir" se establece en "dist". De esta forma separaremos los archivos TypeScript de los compilados. Puedes encontrar más información sobre este archivo y sus propiedades en la documentación oficial de TypeScript.
Ahora, crea un directorio "src" en tu proyecto, y un nuevo archivo "index.ts". Aquí es donde guardaremos el código de scraping. Para ejecutar código TypeScript tienes que compilarlo primero, así que para asegurarnos de que no olvidamos este paso extra, podemos usar un comando definido a medida.
Dirígete al archivo "package. json" y edita la sección "scripts" de la siguiente manera:
"scripts": {
"test": "npx tsc && node dist/index.js"
}
De esta forma, cuando vayas a ejecutar el script, sólo tienes que escribir "npm run test" en tu terminal.
Por último, para raspar los datos del sitio web, utilizaremos Puppeteer, una librería de navegador headless para Node.js que permite controlar un navegador web e interactuar con sitios web de forma programática. Para instalarla, ejecuta este comando en el terminal:
npm install puppeteer
Es muy recomendable cuando se quiere asegurar la integridad de los datos, ya que hoy en día muchos sitios web contienen contenido generado dinámicamente. Si tienes curiosidad, puedes consultar antes de continuar la documentación de Puppeteer para ver completamente de lo que es capaz.
Localización de los datos
Ahora que ya tienes tu entorno configurado, podemos empezar a ver cómo extraer los datos. Para este artículo, elegí raspar la página de un restaurante irlandés de Dublín: https://www.yelp.ie/biz/the-boxty-house-dublin?osq=Restaurants.
Vamos a extraer los siguientes datos:
- el nombre del restaurante;
- la clasificación del restaurante;
- el número de reseñas del restaurante;
- el sitio web de la empresa;
- el número de teléfono de la empresa;
- las direcciones físicas de los restaurantes.
Puede ver toda esta información resaltada en la siguiente captura de pantalla:

Abriendo las Herramientas de Desarrollador en cada uno de estos elementos podrás notar los selectores CSS que usaremos para ubicar los elementos HTML. Si eres bastante novato en el funcionamiento de los selectores CSS, no dudes en consultar esta guía para principiantes.
Extracción de datos
Antes de escribir nuestro script, vamos a verificar que la instalación de Puppeteer se ha realizado correctamente:
import puppeteer from 'puppeteer';
async function scrapeYelpData(yelp_url: string): Promise<void> {
// Launch Puppeteer
const browser = await puppeteer.launch({
headless: false,
args: ['--start-maximized'],
defaultViewport: null
})
// Create a new page
const page = await browser.newPage()
// Navigate to the target URL
await page.goto(yelp_url)
// Close the browser
await browser.close()
}
scrapeYelpData("https://www.yelp.ie/biz/the-boxty-house-dublin?osq=Restaurants")
Aquí abrimos una ventana del navegador, creamos una nueva página, navegamos a nuestra URL de destino y cerramos el navegador. En aras de la simplicidad y la depuración visual, abro la ventana del navegador maximizada en modo no headless.
Ahora, echemos un vistazo a la estructura del sitio web:

Parece que Yelp muestra una estructura de página algo difícil, ya que los nombres de las clases se generan aleatoriamente y muy pocos elementos tienen valores de atributo únicos.
Pero no temas, podemos ser creativos con la solución. En primer lugar, para obtener el nombre del restaurante, nos dirigimos al único elemento "h1" presente en la página.
// Extract restaurant name
const restaurant_name = await page.evaluate(() => {
const name = document.querySelector('h1')
return name ? name.textContent : ''
})
console.log(restaurant_name)
Ahora, para obtener la valoración del restaurante, puede observar que más allá de los iconos de estrellas, el valor explícito está presente en el atributo "aria-label". Por lo tanto, nos dirigimos al elemento "div" cuyo atributo "aria-label" termina con la cadena "star rating".
// Extract restaurant rating
const restaurant_rating = await page.evaluate(() => {
const rating = document.querySelector('div[aria-label$="star rating"]')
return rating ? rating.getAttribute('aria-label') : ''
})
console.log(restaurant_rating)
Y finalmente (para esta sección HTML en particular), vemos que podemos obtener fácilmente el número de revisión apuntando al elemento de anclaje resaltado.
// Extract restaurant reviews
const restaurant_reviews = await page.evaluate(() => {
const reviews = document.querySelector('a[href="#reviews"]')
return reviews ? reviews.textContent : ''
})
console.log(restaurant_reviews)
Muy fácil. Echemos un vistazo al widget de información empresarial:

Por desgracia, en esta situación no podemos confiar en los selectores CSS. Por suerte, podemos hacer uso de otro método para localizar los elementos HTML: XPath. Si eres bastante novato en el funcionamiento de los selectores CSS, no dudes en consultar esta guía para principiantes.
Para extraer la página web del restaurante: aplicamos la siguiente lógica:
localice el elemento "p" que tiene "Sitio web empresarial" como contenido de texto;
localizar al siguiente hermano
localizar el elemento anchor y su atributo "href".
// Extract restaurant website
const restaurant_website_element = await page.$x("//p[contains(text(), 'Business website')]/following-sibling::p/a/@href")
const restaurant_website = await page.evaluate(
element => element.nodeValue,
restaurant_website_element[0]
)
console.log(restaurant_website)
Ahora, para el número de teléfono y la dirección podemos seguir exactamente la misma lógica, con 2 excepciones:
- para el número de teléfono, detenemos el siguiente hermano y extraemos su propiedad textContent ;
- para la dirección, nos dirigimos al siguiente hermano del elemento padre.
// Extract restaurant phone number
const restaurant_phone_element = await page.$x("//p[contains(text(), 'Phone number')]/following-sibling::p")
const restaurant_phone = await page.evaluate(
element => element.textContent,
restaurant_phone_element[0]
)
console.log(restaurant_phone)
// Extract restaurant address
const restaurant_address_element = await page.$x("//a[contains(text(), 'Get Directions')]/parent::p/following-sibling::p")
const restaurant_address = await page.evaluate(
element => element.textContent,
restaurant_address_element[0]
)
console.log(restaurant_address)
El resultado final debería ser el siguiente:
The Boxty House
4,5 estrellas
948 opiniones
/biz_redir?url=http%3A%2F%2Fwww.boxtyhouse.ie%2F&cachebuster=1673542348&website_link_type=website&src_bizid=EoMjdtjMgm3sTv7dwmfHsg&s=16fbda8bbdc467c9f3896a2dcab12f2387c27793c70f0b739f349828e3eeecc3
(01) 677 2762
20-21 Temple Bar Dublin 2
Eludir la detección de bots
Aunque el scraping de Yelp puede parecer fácil al principio, el proceso puede volverse más complejo y difícil a medida que se amplía el proyecto. El sitio web implementa varias técnicas para detectar y evitar el tráfico automatizado, por lo que tu scraper escalado empieza a bloquearse.
Yelp recopila múltiples datos del navegador para generar y asociarte una huella digital única. Algunos de ellos son:
- propiedades del objeto Navigator (deviceMemory, hardwareConcurrency, platform, userAgent, webdriver, etc.)
- controles de tiempo y rendimiento
- trabajadores de servicios
- comprobación de las dimensiones de la pantalla
- y muchos más
Una forma de superar estos retos y continuar con el scraping a gran escala es utilizar una API de scraping. Este tipo de servicios proporcionan una forma sencilla y fiable de acceder a los datos de sitios web como yelp.com, sin necesidad de construir y mantener tu propio scraper.
WebScrapingAPI es un ejemplo de este tipo de producto. Su mecanismo de rotación de proxy evita por completo los CAPTCHA, y su base de conocimientos ampliada permite aleatorizar los datos del navegador para que se parezca a un usuario real.
La configuración es rápida y sencilla. Lo único que tienes que hacer es registrar una cuenta para recibir tu clave API. Puedes acceder a ella desde tu panel de control y se utiliza para autenticar las solicitudes que envías.

Como ya has configurado tu entorno Node.js, podemos hacer uso del SDK correspondiente. Ejecuta el siguiente comando para añadirlo a las dependencias de tu proyecto:
npm install webscrapingapi
Ahora sólo queda enviar una petición GET para que recibamos el documento HTML del sitio web. Ten en cuenta que esta no es la única forma de acceder a la API.
import webScrapingApiClient from 'webscrapingapi';
const client = new webScrapingApiClient("YOUR_API_KEY");
async function exampleUsage() {
const api_params = {
'render_js': 1,
'proxy_type': 'residential',
}
const URL = "https://www.yelp.ie/biz/the-boxty-house-dublin?osq=Restaurants"
const response = await client.get(URL, api_params)
if (response.success) {
console.log(response.response.data)
} else {
console.log(response.error.response.data)
}
}
exampleUsage();
Habilitando el parámetro "render_js", enviamos la petición utilizando un navegador headless, tal y como has hecho previamente a lo largo de este tutorial.
Después de recibir el documento HTML, puede utilizar otra biblioteca para extraer los datos de interés, como Cheerio. ¿No lo conoces? Echa un vistazo a esta guía para empezar.
Conclusión
Este artículo te ha presentado una guía completa sobre cómo hacer web scrape de Yelp usando TypeScript y Puppeteer. Hemos repasado el proceso de configuración del entorno, localización y extracción de datos, y por qué usar un scraper profesional es mejor solución que crear uno propio.
Los datos extraídos de Yelp pueden utilizarse para diversos fines, como identificar tendencias de mercado, analizar la opinión de los clientes, controlar a los competidores, crear campañas de marketing específicas y muchos más.
En general, el web scraping Yelp.com puede ser un activo valioso para cualquiera que busque obtener una ventaja competitiva en su mercado local y esta guía ha proporcionado un gran punto de partida para hacerlo.
Noticias y actualidad
Manténgase al día de las últimas guías y noticias sobre raspado web suscribiéndose a nuestro boletín.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Artículos relacionados

Explore las complejidades del scraping de datos de productos de Amazon con nuestra guía en profundidad. Desde las mejores prácticas y herramientas como Amazon Scraper API hasta las consideraciones legales, aprenda a superar los desafíos, eludir los CAPTCHA y extraer información valiosa de forma eficiente.


Empiece con WebScrapingAPI, la solución definitiva para el web scraping. Recopile datos en tiempo real, evite los sistemas anti-bot y disfrute de soporte profesional.


¿Son los selectores XPath mejores que los selectores CSS para el web scraping? Conozca los puntos fuertes y las limitaciones de cada método y tome la decisión correcta para su proyecto.
