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.