Volver al blog

Cómo raspar los precios de hoteles de Google con Node.js

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

06-Mar-2025

Los cambios estacionales, la fluctuación de la demanda y las actividades promocionales hacen que los precios de los hoteles cambien con frecuencia. Rastrear manualmente estos cambios es casi imposible. En cambio, automatizar este proceso mediante el raspado de sitios web y plataformas de viajes puede ahorrar tiempo y esfuerzo.

En este artículo, le mostraremos cómo raspar los precios de los hoteles de uno de los mayores agregadores: Google. Al raspar los datos de hoteles de Google, puede recopilar rápidamente información extensa sobre los precios, las calificaciones y los servicios de los hoteles para el análisis, la comparación de precios o las estrategias de precios dinámicos.

¿Por qué raspar los precios de los hoteles de Google?

¿Por qué raspar los precios de los hoteles de Google?

Cuando busca palabras clave relacionadas con hoteles, Google genera una sección de hoteles dedicada que incluye nombres, imágenes, direcciones, calificaciones y precios de miles de hoteles. Esto se debe a que Google agrega información de millones de sitios web de viajes y hoteles en un solo lugar.

Los viajeros, las empresas y los analistas pueden utilizar estos datos para diversos fines:

  • Comparación de precios: Compare los precios en diferentes plataformas de reserva y sitios web de viajes para encontrar las mejores ofertas.
  • Análisis de datos: Los analistas pueden utilizar los datos de precios de los hoteles para descubrir tendencias de precios, fluctuaciones estacionales y oportunidades competitivas.
  • Estrategias de precios dinámicos: Las empresas pueden optimizar los ingresos y las tasas de ocupación ajustando los precios en función de la demanda, la disponibilidad y los precios de la competencia.
  • Alertas personalizadas: Supervise las bajadas de precios para alertar a los clientes o para uso personal.
  • Servicios de agregación de viajes: Proporcione a los usuarios una vista consolidada de los precios y las opciones de hoteles de varias fuentes.
  • Presupuestación y planificación: Los viajeros pueden anticipar los costos de alojamiento y ajustar sus planes en consecuencia.

En resumen, los usos de estos datos son vastos, pero antes de poder obtener información, necesita recopilarlos.

Cómo raspar los precios de los hoteles de Google con Node.js

En este tutorial, escribiremos un script para recopilar datos de precios de hoteles y ordenar la lista de hoteles de más barato a más caro, centrándonos en los hoteles de Nueva York.

1. Requisitos previos

Para seguir este tutorial, necesita las siguientes herramientas instaladas en su computadora:

  • Node.js 18+ y NPM
  • Conocimientos básicos de JavaScript y la API de Node.js

2. Configuración del proyecto

Cree una carpeta de proyecto:

Copy
mkdir google-hotel-scraper

A continuación, inicialice un proyecto Node.js ejecutando el siguiente comando:

Copy
cd google-hotel-scraper  
npm init -y

Este comando creará un archivo package.json en la carpeta. Cree un archivo index.js y agregue una instrucción JavaScript simple:

Copy
touch index.js  
echo "console.log('Hello world!');" > index.js

Ejecute el archivo index.js utilizando el tiempo de ejecución de Node.js:

Copy
node index.js

Si se imprime "Hello world!" en la terminal, su proyecto está en funcionamiento.

3. Instalación de las dependencias necesarias

Para construir nuestro raspador, necesitamos dos paquetes de Node.js:

  • Puppeteer: Para cargar las páginas de Google Hotel y descargar el contenido HTML.
  • Cheerio: Para extraer información del hotel del HTML descargado por Puppeteer.

Instale estos paquetes con el siguiente comando:

Copy
npm install puppeteer cheerio

4. Identificación de la información para raspar de la página del hotel de Google

Para extraer información de una página web, primero debemos identificar los selectores DOM que apuntan a los elementos HTML deseados.

Aquí hay una tabla de los selectores DOM para cada parte de los datos relevantes:

Información Selector DOM Descripción
Contenedor del hotel .uaTTDe Un solo elemento de hotel en la lista de resultados
Nombre del hotel .QT7m7 > h2 El nombre del hotel
Precio del hotel .kixHKb > span El precio de la habitación por una noche
Estrellas del hotel .HlxIlc .UqrZme Número de estrellas
Calificación del hotel .oz2bpb > span Comentarios de los clientes sobre el hotel
Opciones del hotel .HlxIlc .XX3dkb Servicios adicionales ofrecidos
Imágenes del hotel .EyfHd .x7VXS Imágenes del hotel

5. Raspando la página del hotel de Google

Con los selectores DOM identificados, usemos Puppeteer para descargar el HTML de la página. La página inicial a la que apuntamos es: https://www.google.com/travel/search.

En algunos países (principalmente en Europa), se mostrará una página de consentimiento antes de redirigir a la URL. Agregaremos código para hacer clic en el botón "Rechazar todo", esperar tres segundos y asegurarnos de que la página del hotel de Google esté completamente cargada.

Actualice el archivo index.js con el siguiente código:

Copy
const puppeteer = require('puppeteer');

const PAGE_URL = 'https://www.google.com/travel/search';

const waitFor = (timeInMs) => new Promise(r => setTimeout(r, timeInMs));

const main = async () => {
    const browser = await puppeteer.launch({ headless: 'new' });
    const page = await browser.newPage();

    await page.goto(PAGE_URL);

    const buttonConsentReject = await page.$('.VfPpkd-LgbsSe[aria-label="Reject all"]');
    await buttonConsentReject?.click();
    await waitFor(3000);

    const html = await page.content();
    await browser.close();

    console.log(html);
}

void main();

Ejecute el código usando node index.js. La terminal mostrará el contenido HTML de la página.

6. Extracción de información del HTML

Aunque tenemos el HTML de la página, extraer datos valiosos directamente del HTML sin procesar es un desafío. Aquí es donde entra Cheerio.

El siguiente código carga el HTML y extrae el precio de la habitación para cada hotel:

Copy
const cheerio = require("cheerio");

const $ = cheerio.load(html);

$('.uaTTDe').each((i, el) => {
    const priceElement = $(el).find('.kixHKb span').first();

    console.log(priceElement.text());
});

Actualice el archivo index.js para extraer el contenido con Cheerio, almacenarlo en una matriz y ordenarlo por precio de menor a mayor:

Copy
const cheerio = require("cheerio");
const puppeteer = require("puppeteer");
const { sanitize } = require("./utils");

const waitFor = (timeInMs) => new Promise(r => setTimeout(r, timeInMs));

const GOOGLE_HOTEL_PRICE = 'https://www.google.com/travel/search';

const main = async () => {
  const browser = await puppeteer.launch({ headless: 'new' });
  const page = await browser.newPage();

  await page.goto(GOOGLE_HOTEL_PRICE);

  const buttonConsentReject = await page.$('.VfPpkd-LgbsSe[aria-label="Reject all"]');
  await buttonConsentReject?.click();
  await waitFor(3000);

  const html = await page.content();
  await browser.close();

  const hotelsList = [];
  const $ = cheerio.load(html);

  $('.uaTTDe').each((i, el) => {
    const titleElement = $(el).find('.QT7m7 > h2');
    const priceElement = $(el).find('.kixHKb span').first();
    const reviewsElement = $(el).find('.oz2bpb > span');
    const hotelStandingElement = $(el).find('.HlxIlc .UqrZme');

    const options = [];
    const pictureURLs = [];

    $(el).find('.HlxIlc .XX3dkb').each((i, element) => {
      options.push($(element).find('span').last().text());
    });

    $(el).find('.EyfHd .x7VXS').each((i, element) => {
      pictureURLs.push($(element).attr('src'));
    });

    const hotelInfo = sanitize({
      title: titleElement.text(),
      price: priceElement.text(),
      standing: hotelStandingElement.text(),
      averageReview: reviewsElement.eq(0).text(),
      reviewsCount: reviewsElement.eq(1).text(),
      options,
      pictures: pictureURLs,
    });

    hotelsList.push(hotelInfo);
  });

  const sortedHotelsList = hotelsList.slice().sort((hotelOne, hotelTwo) => {
    if (!hotelTwo.price) {
      return 1;
    }

    return hotelOne.price - hotelTwo.price;
  });

  console.log(sortedHotelsList);
}

void main();

Ejecute el código y vea los resultados. Acaba de recopilar información sobre todos los hoteles en.

En el contenido anterior, implementamos el rastreo de los precios de los hoteles de Google a través de Node.js y Puppeteer. Aunque este método puede satisfacer las necesidades básicas, requiere escribir mucho código y puede encontrar muchos desafíos cuando se trata de mecanismos complejos anti-rastreo.

Para completar la tarea de manera más eficiente, podemos recomendar un método más simple: usar Scrapeless Deep SerpAPI.

Use Scrapeless Deep SerpApi para rastrear información de hoteles de Google

Deep SerpApi es un motor de búsqueda dedicado diseñado para modelos de lenguaje grandes (LLM) y agentes de IA, con el objetivo de proporcionar información en tiempo real, precisa e imparcial para ayudar a las aplicaciones de IA a recuperar y procesar datos de manera eficiente.

Scrapeless Deep SerpApi

Puede ayudar a los desarrolladores a obtener rápidamente resultados para más de 20 escenarios diferentes de motores de búsqueda de Google. Admite múltiples configuraciones de parámetros, puede personalizar las búsquedas en función de la región, el idioma y el tipo de dispositivo, y proporciona datos JSON estructurados para que los desarrolladores los utilicen directamente.

Deep SerpAPI

Ventajas de Deep SerpAPI

  1. Precio más bajo: Deep SerpAPI tiene un precio tan bajo como $0.1/k. Es el precio más bajo del mercado.

  2. Fácil de usar: No es necesario escribir código complejo, solo obtenga datos a través de llamadas API.

  3. En tiempo real: Cada solicitud puede devolver instantáneamente los resultados de búsqueda más recientes para garantizar la puntualidad de los datos.

  4. Soporte global: A través de direcciones IP globales y clústeres de navegadores, asegúrese de que los resultados de búsqueda sean consistentes con la experiencia de los usuarios reales.

  5. Tipos de datos enriquecidos: Admite más de 20 tipos de búsqueda, como Google Search, Google Maps, Google Shopping, etc.

  6. Alta tasa de éxito: Ofrece hasta 99.995% de disponibilidad del servicio (SLA).

Cómo utilizar Deep SerpAPI playground para raspar información de hoteles de Google

Deep SerpAPI proporciona una poderosa herramienta en línea, Playground, que permite a los desarrolladores raspar rápidamente información de hoteles de Google sin escribir código. Playground es una interfaz visual que puede obtener datos estructurados de resultados de búsqueda a través de configuraciones de parámetros simples y operaciones de clic. Los siguientes son los pasos detallados para usar Deep SerpAPI Playground para raspar información de hoteles de Google.

Cómo obtener la clave API de Deep SerpAPI:

  • Después de registrarse gratis en Scrapeless, obtendrá 20,000 consultas de búsqueda gratuitas.
  • Navegue a Administración de claves API. Luego, haga clic en Crear para generar una clave API única. Una vez creada, simplemente haga clic en AP para copiarla.
Cómo obtener la clave API de Deep SerpAPI

1. Regístrese y acceda al Playground

  • Cree una cuenta: si aún no lo ha hecho, regístrese para obtener una cuenta de Deep SerpAPI.
  • Acceda a Deep SerpApi Playground: una vez que haya iniciado sesión, navegue a la sección "Deep SerpApi".
Regístrese y acceda al Playground

2. Establezca los parámetros de búsqueda

  • En Playground, ingrese su palabra clave de búsqueda, como "hoteles de Nueva York".
  • Configure otros parámetros, como la fecha de entrada, la fecha de salida, el país, el idioma, etc.
Establezca los parámetros de búsqueda

También puede hacer clic para ver la documentación oficial de la API de Scrapeless para obtener información sobre los parámetros de Google Hotels.

3. Realice una búsqueda

  • Haga clic en el botón "Iniciar búsqueda" y Playground enviará una solicitud a la API Deep Serp y devolverá datos JSON estructurados.
  • Los datos devueltos incluirán el nombre del hotel, los detalles de la marca, la información de precios, la descripción, la calificación, las instalaciones, la ubicación cercana, la calificación del hotel, etc.
Realice una búsqueda

4. Vea y exporte datos

  • Explore los datos JSON devueltos para ver información detallada de cada hotel.
  • Si es necesario, puede hacer clic en "Exportar" en la esquina superior derecha para exportar los datos a formato CSV o JSON para un análisis posterior.

5. Intégrelo en su proyecto

  • Si necesita integrar los datos en su aplicación, Deep SerpAPI proporciona soporte de biblioteca para múltiples lenguajes de programación, incluidos Python, JavaScript, Ruby, PHP, Java, C#, C++, Swift, Go y Rust.

Ejemplo de código (Python)

Copy
import json
import requests

class Payload:
    def __init__(self, actor, input_data):
        self.actor = actor
        self.input = input_data

def send_request():
    host = "api.scrapeless.com"
    url = f"https://{host}/api/v1/scraper/request"
    token = "your_token"

    headers = {
        "x-api-token": token
    }

    input_data = {
    "engine": "google_hotel",
       q: query,
       engine: 'google',
       gl: 'us', 
       hl: 'en'  
    }

    payload = Payload("scraper.google.hotel", input_data)

    json_payload = json.dumps(payload.__dict__)

    response = requests.post(url, headers=headers, data=json_payload)

    if response.status_code != 200:
        print("Error:", response.status_code, response.text)
        return

    print("body", response.text)


if __name__ == "__main__":
    send_request()

Plan de precios de Deep SerpAPI: asequible y potente

Deep SerpAPI proporciona una solución rentable para ayudar a los desarrolladores a obtener rápidamente datos de la página de resultados de búsqueda de Google (SERP). Su plan de precios es muy competitivo, con precios tan bajos como $0.1 por cada 1000 consultas, aplicable a más de 20 escenarios de resultados de búsqueda de Google.

Programa de soporte gratuito para desarrolladores

Deep SerpAPI ahora también ofrece un programa de soporte gratuito para desarrolladores para ayudar a los desarrolladores a integrar y utilizar mejor su API. Estos son los detalles del programa:

  • Soporte de integración: integre Deep SerpAPI en sus herramientas de IA, aplicaciones o proyectos. Ya somos compatibles con Dify y pronto seremos compatibles con Langchain, Langflow, FlowiseAI y otros marcos.
  • Duración del soporte gratuito: después de la integración, los desarrolladores pueden obtener de 1 a 12 meses de soporte gratuito para desarrolladores compartiendo sus resultados en GitHub o redes sociales.
  • Cuota de uso: hasta 500k de uso por mes, ayudando a los desarrolladores a no preocuparse por los problemas de costos en las primeras etapas del proyecto.
Programa de soporte gratuito para desarrolladores

Puede unirse a Discord para ponerse en contacto con Liam y obtener información sobre la participación en el evento.

Conclusión

En resumen, raspar los precios de los hoteles de Google con Node.js puede ser un método valioso para recopilar datos de precios, pero presenta desafíos como el manejo de contenido dinámico y la evitación de la detección. Si bien herramientas como Puppeteer o Playwright pueden ayudar, requieren mantenimiento continuo y experiencia técnica. Para agilizar el proceso, recomendamos usar Scrapeless, que proporciona una solución sin problemas y sin código para extraer datos de precios de hoteles de manera eficiente y confiable. Con Scrapeless, puede concentrarse en la información en lugar de las complejidades del raspado web. ¡Pruébelo hoy y simplifique la recopilación de sus datos!

Recursos adicionales

Cómo raspar Google News con Python
Cómo usar Selenium con PowerShell
Raspar detalles del producto de Google Shopping con Scrapeless

En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.

Artículos más populares

Catalogar