A partir daqui, vamos aprofundar-nos para obter os elementos específicos que contêm o preço, o tipo de imagem e as informações de classificação.
Após as linhas de código apresentadas anteriormente, copie o seguinte:
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 pode ver, para cada anúncio que obtemos na primeira página, recuperamos o elemento de preço, a localização da fonte da imagem, o tipo do anúncio e a classificação. No final, teremos uma matriz de objetos, e cada um deles conterá todos os elementos desta lista.
Agora que escrevemos todo o código necessário para extrair as informações do Airbnb, o ficheiro index.js deve ficar mais ou menos assim:
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 pode ver, extrair dados do Airbnb usando a WebScrapingAPI é bastante simples.
- Envie um pedido à WebScrapingAPI utilizando os parâmetros necessários: a chave API e o URL de onde precisamos de extrair os dados.
- Carregue o DOM utilizando o JSDOM.
- Selecione todos os anúncios localizando a classe específica.
- Para cada anúncio, obtenha o preço, a imagem, o tipo de anúncio e a classificação.
- Adicione cada local a uma nova matriz chamada «results».
- Regista a matriz de resultados recém-criada no ecrã.
A resposta deverá ficar mais ou menos assim:
[
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'
},
...
]
Uma das limitações que enfrentamos atualmente é que apenas extraímos as informações de uma página da nossa pesquisa. Isto pode ser resolvido utilizando algum tipo de navegador headless, como o Puppeteer, ou uma ferramenta de automação de navegador como o Selenium. Isto irá ajudar-nos a realizar a maioria das tarefas que podemos fazer manualmente num navegador web, como preencher um formulário ou clicar num botão.
Recomendamos que consulte o nosso Guia Definitivo para Web Scraping com JavaScript e Node.js se quiser saber mais sobre estas tecnologias.