Como extrair dados de anúncios do AirBnB

Robert Sfichi em 26 de maio de 2021

imagem do blogue

Já alguma vez se viu na situação de tentar descobrir o local perfeito para passar as férias? Ou talvez só queira saber como é que o seu anúncio compete com o dos seus vizinhos. Seja como for, porque não utilizar o poder da recolha de dados da Web para o fazer?

Um web scraper é um software que o ajuda a automatizar o tedioso processo de recolha de dados úteis de sítios Web de terceiros. A maioria dos serviços online oferece aos programadores acesso a uma API para ler facilmente as informações do seu sítio Web. Infelizmente, o Airbnb não é um deles. É aqui que os web scrapers entram em ação.

Por que é que alguém iria recolher dados do Airbnb?

A Airbnb é uma plataforma que dá às pessoas a oportunidade de alugar as suas propriedades utilizando apenas uma ligação à Internet. Foi fundada em 2008 por Brian Chesky, Nathan Blecharczyk e Joe Gebbia e teve um enorme sucesso mesmo durante a pandemia.

Qualquer pessoa pode encontrar os anúncios na plataforma acedendo à Airbnb e procurando um local, mas não existe uma forma fácil de encontrar um conjunto de dados significativo com as seguintes informações:

  • Quantas listagens existem numa cidade?
  • Qual é o seu preço?
  • Como é que eles são?
  • Como é que são classificados?

É claro que tem as suas próprias razões para querer obter esta informação e estou certo de que podemos ajudar.

Vamos lá começar!

Extrair dados com uma API de raspagem da Web

Para poder extrair todos os dados necessários, certifique-se de que segue os passos seguintes.

1. Inspeção do código fonte

Verifique os elementos que está interessado em extrair do sítio Web da Airbnb. Ao clicar com o botão direito do rato em qualquer parte da página e selecionar a opção "Inspect" (Inspecionar), verá as Developer Tools (Ferramentas do programador).

Digamos que pretendemos obter o preço, a imagem, o tipo e a classificação dos locais que vamos pesquisar.

Primeiro, vamos encontrar o elemento comum no DOM. Parece que _gigle7 é o que estamos à procura.

imagem do blogue

2. Escolher um raspador da Web

Para obter os melhores resultados, recomendamos a utilização do nosso serviço, WebScrapingAPI, pois é nele que vamos basear o nosso tutorial. Pode experimentá-lo gratuitamente acedendo a esta ligação. Crie uma conta e volte a esta página quando terminar.

Depois de iniciar sessão, aceda à página do painel de controlo. Aqui, pode encontrar a sua chave de acesso privada à API, que utilizaremos para efetuar os pedidos, o parque de recreio da API, onde pode testar o nosso produto, e a documentação.

imagem do blogue

3. Criação do projeto

Depois de ter criado uma pasta para o projeto, execute os seguintes comandos:

npm init -y
npm install got jsdom

Para efetuar os pedidos, vamos instalar o módulo got e, para as nossas necessidades de análise de HTML, vamos utilizar o pacote jsdom.

Crie um novo ficheiro chamado "index.js" e abra-o.

4. Efetuar o pedido

Vamos definir os parâmetros, fazer o pedido e analisar o HTML. Escreva as seguintes linhas no ficheiro criado 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 dissemos anteriormente, toda a informação relevante pode ser encontrada no elemento _gigle7, por isso vamos buscar todos os elementos que estão atribuídos à classe _gigle7. Pode iniciar sessão no ecrã adicionando uma ação console.log() logo a seguir à linha onde definimos os locais constantemente.

consola.log(lugares)

5. Obter os dados em formato JSON

A partir daqui, vamos aprofundar para obter os elementos específicos que contêm as informações sobre o preço, o tipo de imagem e a 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, vamos buscar o elemento da etiqueta de preço, a localização da fonte da imagem, o tipo do anúncio e a classificação. No final, teremos um conjunto de objectos, 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 ter o seguinte aspeto:

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, a recolha de dados do Airbnb utilizando a WebScrapingAPI é bastante simples.

  1. Efetuar um pedido à WebScrapingAPI utilizando os parâmetros necessários: a chave da API e o URL a partir do qual pretendemos extrair os dados.
  2. Carregar o DOM utilizando JSDOM.
  3. Selecionar todas as listagens procurando a classe específica.
  4. Para cada anúncio, obtenha a etiqueta de preço, a imagem, o tipo de anúncio e a classificação.
  5. Adiciona cada lugar a uma nova matriz chamada resultados.
  6. Registar no ecrã a matriz de resultados recentemente criada.

A resposta deve ser 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 com que nos deparamos atualmente é o facto de apenas recolhermos as informações de uma página da nossa pesquisa. Isso pode ser corrigido usando algum tipo de navegador sem cabeça, como o Puppeteer, ou uma ferramenta de automação de navegador como o Selenium. Isso nos ajudará a fazer a maioria das coisas que podemos fazer manualmente em um navegador da Web, como preencher um formulário ou clicar em um botão.

Recomendamos que consulte o nosso Guia definitivo para Web Scraping com JavaScript e Node.Js se quiser saber mais sobre essas tecnologias.

O poder da recolha de dados da Web

Como pode ver, conseguimos construir um web scraper básico em apenas alguns minutos. A partir daqui, a sua imaginação é o limite. Se for suficientemente ambicioso, pode até utilizar os dados recolhidos para visualizar a distribuição e a concentração das propriedades num mapa. A Airbnb fornece-lhe todas as informações necessárias no cabeçalho de qualquer página de anúncio.

Como pode ver, a recolha de dados da Web pode ser uma das formas mais divertidas de passar o seu tempo como programador de software. Pode facilmente obter todos os dados de que necessita para criar uma nova aplicação para um nicho específico ou simplesmente treinar as suas capacidades. Se tiver algum problema com o processo, não hesite em pedir ajuda na secção de comentários e teremos todo o gosto em ajudar!

Se este artigo não o ajudou a compreender totalmente as capacidades da recolha de dados da Web, pode ver outro exemplo de como as empresas podem construir um Web scraper passo a passo.

Obrigado pelo vosso tempo! Boa raspagem!

Notícias e actualizações

Mantenha-se atualizado com os mais recentes guias e notícias sobre raspagem da Web, subscrevendo a nossa newsletter.

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Artigos relacionados

miniatura
Casos de utilizaçãoUtilização de Web Scraping para dados alternativos em finanças: Um guia completo para investidores

Explore o poder transformador da recolha de dados da Web no sector financeiro. Desde dados de produtos a análises de sentimentos, este guia oferece informações sobre os vários tipos de dados da Web disponíveis para decisões de investimento.

Mihnea-Octavian Manolache
avatar do autor
Mihnea-Octavian Manolache
13 min ler
miniatura
Casos de utilizaçãoLibertar o poder dos dados financeiros: Explorando dados tradicionais e alternativos

Mergulhe no papel transformador dos dados financeiros na tomada de decisões empresariais. Compreender os dados financeiros tradicionais e a importância emergente dos dados alternativos.

Suciu Dan
avatar do autor
Suciu Dan
8 min. de leitura
miniatura
Ciência da recolha de dados da WebMelhores cursos de Web Scraping - Descubra qual é o melhor para si

Saudações, Se está interessado em aprender Web Scraping em 2023 e a procurar os melhores cursos online para fazer, veio ao sítio certo.

Ștefan Răcila
avatar do autor
Ștefan Răcila
4 min ler