Voltar ao blogue
Casos de utilização
Robert SfichiLast updated on Mar 31, 20265 min read

Como extrair dados de anúncios do Airbnb

Como extrair dados de anúncios do Airbnb

Alguma vez já se viu na situação de tentar descobrir o local perfeito para passar as férias? Ou talvez queira apenas saber como o seu anúncio se compara aos dos vizinhos. Seja como for, porque não aproveitar o poder do web scraping para o fazer?

Um web scraper é um software que ajuda a automatizar o tedioso processo de recolha de dados úteis de sites de terceiros. A maioria dos serviços online oferece aos programadores acesso a uma API para facilitar a leitura de informações dos seus sites. Infelizmente, o Airbnb não é um deles. É aqui que os web scrapers entram em ação.

Por que razão alguém iria extrair dados do Airbnb?

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

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

  • Quantos anúncios existem numa cidade?
  • Quais são os seus preços?
  • Como são?
  • Como são avaliados?

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

Vamos começar!

Extrair dados com uma API de web scraping

Para conseguir extrair todos os dados necessários, certifique-se de seguir os passos seguintes.

1. Inspecionar o código-fonte

Verifique os elementos que pretende extrair do site da Airbnb. Ao clicar com o botão direito do rato em qualquer ponto da página e selecionar a opção «Inspecionar», acederá às Ferramentas de Programador.

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

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

2. Escolher um web scraper

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

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

3. Configurar o projeto

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

npm init -y
npm install got jsdom

Para fazer as solicitações, vamos instalar o módulo got e, para as nossas necessidades de análise de HTML, usaremos o pacote jsdom.

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

4. Fazer a solicitação

Vamos definir os parâmetros, fazer a solicitação 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 já referimos, toda a informação relevante pode ser encontrada no elemento _gigle7, pelo que vamos recuperar todos os elementos atribuídos à classe _gigle7. Pode registar-se no ecrã adicionando uma ação console.log() logo a seguir à linha onde definimos as variáveis.

console.log(places)

5. Obter os dados no formato JSON

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.

O poder do web scraping

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

Como pôde ver, o web scraping pode ser uma das formas mais divertidas de passar o seu tempo como programador de software. Pode facilmente obter todos os dados de que precisa para criar uma nova aplicação para um nicho específico ou simplesmente aperfeiçoar as suas competências. Se tiver alguma dificuldade 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 do web scraping, pode dar uma vista de olhos a outro exemplo de como as empresas podem construir um web scraper passo a passo.

Obrigado pelo seu tempo! Boas scraping!

Sobre o autor
Robert Sfichi, Desenvolvedor Full-Stack @ WebScrapingAPI
Robert SfichiDesenvolvedor Full-Stack

Robert Sfichi é membro da equipa da WebScrapingAPI, contribuindo para o produto e ajudando a criar soluções fiáveis que apoiam a plataforma e os seus utilizadores.

Comece a construir

Pronto para expandir a sua recolha de dados?

Junte-se a mais de 2.000 empresas que utilizam a WebScrapingAPI para extrair dados da Web à escala empresarial, sem quaisquer custos de infraestrutura.