Saltar al contenido
Volver al blog

Cómo extraer datos de anuncios de Airbnb

Robert SfichiÚltima actualización el 5 min read
Cómo extraer datos de anuncios de Airbnb

Empezar a extraer

Prueba WebScrapingAPI gratis

Consigue 1.000 créditos de API gratis. No es necesario tener tarjeta de crédito.

Empieza

¿Alguna vez te has encontrado en la situación de intentar encontrar el lugar perfecto para pasar las vacaciones? O quizá solo quieras saber cómo compite tu anuncio con los de tus vecinos. Sea como sea, ¿por qué no aprovechar el potencial del web scraping para hacerlo?

Un web scraper es un software que te ayuda a automatizar el tedioso proceso de recopilar datos útiles de sitios web de terceros. La mayoría de los servicios online ofrecen a los desarrolladores acceso a una API para poder leer fácilmente la información de su sitio web. Por desgracia, Airbnb no es uno de ellos. Aquí es donde entran en juego los web scrapers.

¿Por qué querría alguien extraer datos de Airbnb?

Airbnb es una plataforma que ofrece a las personas la oportunidad de alquilar sus propiedades con solo una conexión a Internet. Fue fundada en 2008 por Brian Chesky, Nathan Blecharczyk y Joe Gebbia, y ha tenido un éxito enorme incluso durante la pandemia.

Cualquiera puede encontrar los anuncios en la plataforma con solo acceder a Airbnb y buscar un alojamiento, pero no hay una forma fácil de encontrar un conjunto de datos significativo con la siguiente información:

  • ¿Cuántos anuncios hay en una ciudad?
  • ¿Cuál es su precio?
  • ¿Cómo son?
  • ¿Qué valoración tienen?

Por supuesto, cada uno tiene sus propios motivos para querer obtener esta información y estoy seguro de que podemos ayudar con esto.

¡Empecemos!

Extracción de datos con una API de web scraping

Para poder extraer todos los datos necesarios, asegúrate de seguir los siguientes pasos.

1. Inspeccionar el código fuente

Echa un vistazo a los elementos que te interesan extraer de la página web de Airbnb. Al hacer clic con el botón derecho en cualquier parte de la página y seleccionar la opción «Inspeccionar», podrás ver las Herramientas de desarrollador.

Supongamos que queremos obtener el precio, la imagen, el tipo y la valoración de los alojamientos que vamos a extraer.

En primer lugar, vamos a buscar el elemento común en el DOM. Parece que _gigle7 es lo que estamos buscando.

2. Elegir un rastreador web

Para obtener los mejores resultados, te recomendamos utilizar nuestro servicio, WebScrapingAPI, ya que es en el que basaremos nuestro tutorial. Puedes probarlo gratis accediendo a este enlace. Crea una cuenta y vuelve a esta página cuando hayas terminado.

Una vez que hayas iniciado sesión, ve a la página del panel de control. Aquí encontrarás tu clave de acceso privada a la API, que utilizaremos para realizar las solicitudes, el entorno de pruebas de la API, donde podrás probar nuestro producto, y la documentación.

3. Configuración del proyecto

Una vez que hayas creado una carpeta para el proyecto, ejecuta los siguientes comandos:

npm init -y
npm install got jsdom

Para realizar las solicitudes, vamos a instalar el módulo got, y para nuestras necesidades de análisis de HTML, utilizaremos el paquete jsdom.

Crea un nuevo archivo llamado «index.js» y ábrelo.

4. Realización de la solicitud

Configuremos los parámetros, realicemos la solicitud y analicemos el HTML. Escribe las siguientes líneas en el archivo creado anteriormente:

const {JSDOM} = require("jsdom")
const got = require("got")

(async () => {
const params = {
       api_key: "YOUR_API_KEY",
       url: "https://www.airbnb.com/s/Berlin/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&flexible_trip_dates%5B%5D=april&flexible_trip_dates%5B%5D=may&flexible_trip_lengths%5B%5D=weekend_trip&date_picker_type=calendar&source=structured_search_input_header&search_type=filter_change&place_id=ChIJAVkDPzdOqEcRcDteW0YgIQQ&checkin=2021-04-01&checkout=2021-04-08"
   }

   const response = await got('https://api.webscrapingapi.com/v1', {searchParams: params})
const {document} = new JSDOM(response.body).window

   const places = document.querySelectorAll('._gig1e7')

})()

Como hemos indicado anteriormente, toda la información relevante se encuentra bajo el elemento _gigle7, por lo que vamos a recuperar todos los elementos asignados a la clase _gigle7. Puedes visualizar el resultado en pantalla añadiendo una acción console.log() justo después de la línea donde definimos las variables.

console.log(places)

5. Obtener los datos en formato JSON

A partir de aquí, profundizaremos para obtener los elementos específicos que contienen el precio, el tipo de imagen y la información de valoración.

Después de las líneas de código presentadas anteriormente, copia lo siguiente:

const results = []

   places.forEach(place => {

       if (place) {
           const price = place.querySelector('._ls0e43')
           if (price) place.price = price.querySelector('._krjbj').innerHTML

           const image = place.querySelector('._91slf2a')
           if (image) place.image = image.src

           const type = place.querySelector('._b14dlit')
           if (type) place.type = type.innerHTML

           const rating = place.querySelector('._10fy1f8')
           if (rating) place.rating = rating.innerHTML

           results.push(place)
       }

   })

console.log(results)

Como puedes ver, para cada anuncio que obtenemos en la primera página, recuperamos el elemento del precio, la ubicación de la fuente de la imagen, el tipo de anuncio y la valoración. Al final, tendremos una matriz de objetos, y cada uno de ellos contendrá todos los elementos de esta lista.

Ahora que hemos escrito todo el código necesario para extraer la información de Airbnb, el archivo index.js debería tener un aspecto similar a este:

const {JSDOM} = require("jsdom");
const got = require("got");

(async () => {
   const params = {
       api_key: "YOUR_API_KEY",
       url: "https://www.airbnb.com/s/Berlin/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&flexible_trip_dates%5B%5D=april&flexible_trip_dates%5B%5D=may&flexible_trip_lengths%5B%5D=weekend_trip&date_picker_type=calendar&source=structured_search_input_header&search_type=filter_change&place_id=ChIJAVkDPzdOqEcRcDteW0YgIQQ&checkin=2021-04-01&checkout=2021-04-08"
   }

   const response = await got('https://api.webscrapingapi.com/v1', {searchParams: params})

   const {document} = new JSDOM(response.body).window

   const places = document.querySelectorAll('._gig1e7')
   const results = []

   places.forEach(place => {

       if (place) {
           const price = place.querySelector('._ls0e43')
           if (price) place.price = price.querySelector('._krjbj').innerHTML

           const image = place.querySelector('._91slf2a')
           if (image) place.image = image.src

           const type = place.querySelector('._b14dlit')
           if (type) place.type = type.innerHTML

           const rating = place.querySelector('._10fy1f8')
           if (rating) place.rating = rating.innerHTML

           results.push(place)
       }

   })

   console.log(results)

})()

Como puedes ver, extraer datos de Airbnb utilizando WebScrapingAPI es bastante sencillo.

  • Realiza una solicitud a WebScrapingAPI utilizando los parámetros necesarios: la clave API y la URL de la que necesitamos extraer datos.
  • Carga el DOM utilizando JSDOM.
  • Selecciona todos los anuncios buscando la clase específica.
  • Para cada anuncio, obtén el precio, la imagen, el tipo de anuncio y la valoración.
  • Añade cada anuncio a una nueva matriz llamada «results».
  • Muestra en pantalla la matriz «results» recién creada.

La respuesta debería tener un aspecto similar a este:

[
  HTMLDivElement {
    price: '$47 per night, originally $67',
    image: 'https://a0.muscache.com/im/pictures/miso/Hosting-46812239/original/c56d6bb5-3c2f-4374-ac01-ca84a50d31cc.jpeg?im_w=720',
    type: 'Room in serviced apartment in Friedrichshain',
    rating: '4.73'
  },
  HTMLDivElement {
    price: '$82 per night, originally $109',
    image: 'https://a0.muscache.com/im/pictures/miso/Hosting-45475252/original/f6bd7cc6-f72a-43ef-943e-deba27f8253d.jpeg?im_w=720',
    type: 'Entire serviced apartment in Mitte',
    rating: '4.80'
  },
  HTMLDivElement {
    price: '$97 per night, originally $113',
    image: 'https://a0.muscache.com/im/pictures/92966859/7deb381e_original.jpg?im_w=720',
    type: 'Entire apartment in Mitte',
    rating: '4.92'
  },
  HTMLDivElement {
    price: '$99 per night, originally $131',
    image: 'https://a0.muscache.com/im/pictures/f1b953ca-5e8a-4fcd-a224-231e6a92e643.jpg?im_w=720',
    type: 'Entire apartment in Prenzlauer Berg',
    rating: '4.90'
  },
  HTMLDivElement {
    price: '$56 per night, originally $61',
    image: 'https://a0.muscache.com/im/pictures/bb0813a6-e9fe-4f0a-81a8-161440085317.jpg?im_w=720',
    type: 'Entire apartment in Tiergarten',
    rating: '4.67'
  },
...
]

Una de las limitaciones a las que nos enfrentamos actualmente es que solo extraemos la información de una página de nuestra búsqueda. Esto se puede solucionar utilizando algún tipo de navegador sin interfaz gráfica, como Puppeteer, o una herramienta de automatización de navegadores como Selenium. Esto nos ayudará a realizar la mayoría de las acciones que podemos hacer manualmente en un navegador web, como rellenar un formulario o hacer clic en un botón.

Te animamos a que eches un vistazo a nuestra Guía definitiva sobre web scraping con JavaScript y Node.js si quieres saber más sobre estas tecnologías.

El poder del web scraping

Como puedes ver, hemos conseguido crear un scraper web básico en solo un par de minutos. A partir de aquí, tu imaginación es el límite. Si eres lo suficientemente ambicioso, incluso puedes usar los datos que recopiles para visualizar la distribución y concentración de las propiedades en un mapa. Airbnb te proporciona toda la información necesaria en la parte superior de cualquier página de anuncio.

Como has podido ver, el web scraping puede ser una de las formas más divertidas de pasar el tiempo como desarrollador de software. Puedes obtener fácilmente todos los datos que necesitas para crear una nueva aplicación para un nicho específico o simplemente para practicar tus habilidades. Si tienes algún problema con el proceso, no dudes en pedir ayuda en la sección de comentarios y estaremos encantados de ayudarte.

Si este artículo no te ha ayudado a comprender plenamente las capacidades del web scraping, puedes echar un vistazo a otro ejemplo de cómo las empresas pueden crear un web scraper paso a paso.

¡Gracias por tu tiempo! ¡Feliz scraping!

Acerca del autor

Robert Sfichi, Desarrollador full-stack @ WebScrapingAPI

Robert Sfichi

Desarrollador full-stack

Robert Sfichi forma parte del equipo de WebScrapingAPI, donde contribuye al desarrollo del producto y ayuda a crear soluciones fiables que dan soporte a la plataforma y a sus usuarios.

Raspado alternativo de datos para las finanzas: Cómo los datos web dan ventaja a los inversores
Casos de uso

Raspado alternativo de datos para las finanzas: Cómo los datos web dan ventaja a los inversores

TL;DR: El scraping de datos alternativos utiliza técnicas de recopilación web para reunir conjuntos de datos no tradicionales (precios de productos, opiniones, ofertas de empleo, registros normativos) que revelan señales del mercado antes de que aparezcan en los informes de resultados. Esta guía le guiará a través de las fuentes de datos de mayor valor, cómo crear canales de calidad financiera, la validación de la calidad de los datos y las salvaguardas de cumplimiento que necesita para mantenerse en el lado correcto de la ley.

Mihnea-Octavian Manolache20 min read
Leer artículo
¿Qué son los datos financieros? Tipos, métodos de recopilación y herramientas de análisis
Casos de uso

¿Qué son los datos financieros? Tipos, métodos de recopilación y herramientas de análisis

TL;DR: Los datos financieros son la recopilación de registros cuantitativos (ingresos, gastos, activos, pasivos, flujo de caja) que las organizaciones y los particulares utilizan para tomar decisiones económicas fundamentadas. Esta guía desglosa los cuatro estados financieros básicos, compara las fuentes de datos tradicionales y alternativas, recorre los métodos de recopilación modernos y cubre las herramientas en las que se basan los profesionales para el análisis.

Suciu Dan16 min read
Leer artículo
XPath vs Selectores CSS: Elegir el correcto
Casos de uso

XPath vs Selectores CSS: Elegir el correcto

TL;DR: Tanto XPath como los selectores CSS localizan elementos DOM, pero resuelven problemas diferentes. Los selectores CSS son más rápidos y más legibles para selecciones sencillas. XPath gana cuando se necesita recorrer el DOM en cualquier dirección, hacer coincidir contenido de texto o manejar lógica condicional compleja. La mayoría de los proyectos de producción se benefician del uso estratégico de ambos.

Mihai Maxim15 min read
Leer artículo

Empieza a crear

¿Estás listo para ampliar tu recopilación de datos?

Únete a más de 2000 empresas que utilizan WebScrapingAPI para extraer datos de la web a escala empresarial sin ningún gasto de infraestructura.