Volver al blog
Casos prácticos
Robert Sfichi26 de mayo de 20217 minutos de lectura

Cómo extraer datos de los anuncios de AirBnB

Cómo extraer datos de los anuncios de AirBnB

¿Por qué rasparía alguien los datos de Airbnb?

Airbnb es una plataforma que ofrece a la gente la oportunidad de alquilar sus propiedades utilizando sólo una conexión a Internet. Fue fundada en 2008 por Brian Chesky, Nathan Blecharczyk y Joe Gebbia y ha cosechado un éxito masivo incluso durante la pandemia.

Todo el mundo puede encontrar los anuncios en la plataforma simplemente accediendo a Airbnb y buscando un lugar, pero no hay una forma fácil de encontrar un conjunto de datos significativo con la siguiente información:

  • ¿Cuántos listados hay en una ciudad?
  • ¿Cuál es su precio?
  • ¿Qué aspecto tienen?
  • ¿Cómo se clasifican?

Por supuesto, usted tiene sus propias razones para querer obtener esta información y estoy seguro de que podemos ayudarle 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. Inspección del código fuente

Compruebe los elementos que le interesa extraer del sitio web de Airbnb. Haciendo clic con el botón derecho del ratón en cualquier parte de la página y seleccionando la opción "Inspeccionar", accederá a las Herramientas para desarrolladores.

Digamos que queremos obtener el precio, la imagen, el tipo y la calificación de los lugares que vamos a raspar.

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

Resultados de búsqueda de Airbnb para estancias en Berlín, mostrados junto a Chrome DevTools mientras se examina el código de los anuncios

2. Elegir un rascador web

Para obtener los mejores resultados, recomendamos utilizar nuestro servicio, WebScrapingAPI, ya que es en el que basaremos nuestro tutorial. Puedes probarlo gratuitamente 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 patio de recreo de la API, donde podrás probar nuestro producto, y la documentación.

Panel de inicio rápido en tres pasos que muestra una clave de acceso a la API, un entorno de pruebas de la API y un paso de integración

3. Puesta en marcha del proyecto

Después de haber creado una carpeta para el proyecto, ejecute los siguientes comandos:

npm init -y
npm install got jsdom

Para realizar las peticiones vamos a instalar el módulo got, y para nuestras necesidades de parseo HTML, utilizaremos el paquete jsdom.

Crea un nuevo archivo llamado "index.js" y ábrelo.

4. Realización de la solicitud

Establezcamos los parámetros y hagamos la petición y parseemos 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 dicho anteriormente, toda la información relevante se encuentra bajo el elemento _gigle7, así que vamos a buscar todos los elementos que estén asignados a la clase _gigle7. Puedes entrar en la pantalla añadiendo una acción console.log() justo después de la línea donde definimos los lugares constantemente.

console.log(lugares)

5. Obtención de los datos en formato JSON

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

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

const resultados = []

   lugares.forEach(lugar => {

       if (lugar) {
           const precio = lugar.querySelector('._ls0e43')
           if (precio) lugar.precio = precio.querySelector('._krjbj').innerHTML

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

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

           const valoración = place.querySelector('._10fy1f8')
           if (valoración) place.valoración = valoración.innerHTML

           results.push(place)
       }

   })

console.log(results)

Como puedes ver, para cada anuncio que obtenemos en la primera página, obtenemos el elemento de la etiqueta de precio, la ubicación de la fuente de la imagen, el tipo de anuncio y la valoración. Al final, tendremos un array de objetos, y cada uno de ellos contendrá cada elemento de esta lista.

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

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 puede ver, raspar datos de Airbnb utilizando WebScrapingAPI es bastante sencillo.

  • Realiza una petición a WebScrapingAPI utilizando los parámetros necesarios: la clave API y la URL de la que necesitamos obtener los datos.
  • Carga el DOM utilizando JSDOM.
  • Seleccione todos los listados buscando la clase específica.
  • Para cada anuncio, obtenga el precio, la imagen, el tipo de anuncio y la valoración.
  • Añade cada lugar a un nuevo array llamado resultados.
  • Registre en la pantalla la nueva matriz de resultados creada.

La respuesta debería ser algo parecido a esto:

[
  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 sólo raspamos la información de una página de nuestra búsqueda. Esto se puede solucionar utilizando algún tipo de navegador headless, como Puppeteer, o una herramienta de automatización de navegadores como Selenium. Esto nos ayudará a hacer la mayoría de las cosas que podemos hacer manualmente en un navegador web, como completar un formulario o hacer clic en un botón.

Le animamos a consultar nuestra Guía definitiva sobre Web Scraping con JavaScript y Node.Js si desea obtener más información sobre estas tecnologías.

El poder del web scraping

Como puedes ver, hemos conseguido construir un raspador web básico en sólo un par de minutos. A partir de aquí, tu imaginación es el límite. Si es lo suficientemente ambicioso, puede incluso utilizar los datos recopilados para visualizar la distribución y concentración de las propiedades en un mapa. Airbnb le proporciona toda la información necesaria en la cabecera de cualquier página de anuncios.

Como puedes 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 entrenar 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 le ha ayudado a entender completamente las capacidades del web scraping puede echar un vistazo a otro ejemplo de cómo las empresas pueden construir un web scraper paso a paso.

Gracias por su tiempo. ¡Feliz raspado!

Acerca del autor
Robert Sfichi, desarrollador full-stack en 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.