Saltar para o conteúdo
Voltar ao blogue

Como extrair dados de anúncios do Airbnb

Robert SfichiÚltima atualização em 5 min read
Como extrair dados de anúncios do Airbnb

Começar a extrair

Experimente a WebScrapingAPI gratuitamente

Receba 1.000 créditos de API gratuitos. Não é necessário cartão de crédito.

Comece já

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 Sfichi

Desenvolvedor 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.

Recolha alternativa de dados para o sector financeiro: Como os dados da Web dão aos investidores uma vantagem
Casos de utilização

Recolha alternativa de dados para o sector financeiro: Como os dados da Web dão aos investidores uma vantagem

TL;DR: A recolha de dados alternativos utiliza técnicas de recolha na Web para reunir conjuntos de dados não tradicionais (preços de produtos, sentimentos, anúncios de emprego, registos regulamentares) que revelam sinais de mercado antes de aparecerem nos relatórios de ganhos. Este guia orienta-o através das fontes de dados de maior valor, como criar condutas de nível financeiro, validação da qualidade dos dados e as protecções de conformidade necessárias para se manter do lado certo da lei.

Mihnea-Octavian Manolache19 min read
Ler artigo
O que são dados financeiros? Tipos, métodos de recolha e ferramentas de análise
Casos de utilização

O que são dados financeiros? Tipos, métodos de recolha e ferramentas de análise

TL;DR: Os dados financeiros são a coleção de registos quantitativos (receitas, despesas, activos, passivos, fluxo de caixa) que as organizações e os indivíduos utilizam para tomar decisões económicas informadas. Este guia analisa as quatro principais demonstrações financeiras, compara as fontes de dados tradicionais e alternativas, apresenta métodos de recolha modernos e abrange as ferramentas em que os profissionais confiam para a análise.

Suciu Dan15 min read
Ler artigo
Selectores XPath vs CSS: Escolher o correto
Casos de utilização

Selectores XPath vs CSS: Escolher o correto

TL;DR: Os selectores XPath e CSS localizam ambos elementos DOM, mas resolvem problemas diferentes. Os selectores CSS são mais rápidos e mais legíveis para selecções simples. O XPath ganha quando é necessário percorrer o DOM em qualquer direção, fazer corresponder conteúdo de texto ou lidar com lógica condicional complexa. A maioria dos projectos de produção beneficia da utilização de ambos estrategicamente.

Mihai Maxim14 min read
Ler artigo

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.