Volver al blog
Casos de uso
Robert SfichiLast updated on Mar 31, 20265 min read

Cómo extraer datos de anuncios de Airbnb

Cómo extraer datos de anuncios de Airbnb

¿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 SfichiDesarrollador 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.

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.