Voltar ao blogue
Casos de utilização
Robert Munceanu14 de julho de 202110 min de leitura

O guia completo para a recolha de dados imobiliários na Web

O guia completo para a recolha de dados imobiliários na Web

Porque é que deve recolher dados imobiliários

A pesquisa na Web garante que as informações extraídas sobre o sector imobiliário são precisas, credíveis e actualizadas. Desta forma, é possível prever se o mercado imobiliário vai disparar em breve ou ver em que faixa de preço o seu imóvel vai competir.

Para as empresas, os dados da Web são valiosos porque conduzem a melhores decisões, melhores preços e uma margem de lucro mais significativa. No entanto, o problema é que cada pedaço de informação tem de ser o mais recente possível, o que faz da recolha de dados da Web a solução óbvia.

Os tipos de dados imobiliários mais frequentemente extraídos são os seguintes:

  • Tipo de propriedade
  • Preço de venda
  • Localização
  • Tamanho
  • Amenidades
  • Preço de aluguer mensal
  • Lugares de estacionamento
  • Agente imobiliário

As informações listadas acima podem fazer a diferença numa agência imobiliária. Faz uma enorme diferença na comunicação, estratégia e eficiência, mas a maior vantagem é o facto de os agentes conhecerem bem as suas propriedades e o mercado. Depois disso, é apenas uma questão de encontrar o cliente certo.

Vejamos alguns cenários que ilustram o valor da recolha de dados da Web:

Agências imobiliárias

  • Tomada de decisões: Assumir riscos faz parte do trabalho, mas isso não significa que tenha de o fazer às cegas. Pesquisar antes de comprar ou vender algo é obrigatório para trabalhar, e mais informação significa melhores negócios.
  • Prever o mercado: É crucial saber quando comprar e vender propriedades para obter o melhor e mais rentável resultado. Alguns tipos de imóveis ganham popularidade, enquanto outros perdem o seu brilho. Algumas zonas florescem enquanto outras estagnam. Saber o que está para vir é a chave para a longevidade de um negócio.

Pessoas comuns

A recolha de dados da Web não serve apenas para ajudar as empresas. Na verdade, parte do que a torna tão popular é a facilidade com que pode ser utilizada por uma única pessoa. Claro que é necessário ter alguns conhecimentos de informática, mas existem muitos tutoriais para o ajudar. Este é um deles!

  • Compra e venda: É necessário deduzir com exatidão o valor do imóvel antes de o comprar ou vender. Seria uma pena vender a sua casa de infância e, uma semana depois, vê-la num site imobiliário pelo dobro do preço, não é verdade?
  • Investir: Se gosta de investir em propriedades, quer comprando a um preço baixo para vender mais tarde com lucro, quer simplesmente alugando a propriedade, é altamente recomendável saber quando é que vai atingir o ponto de equilíbrio e que rendimentos deve esperar.

Ok, já chega de casos de utilização. Vamos ver algum código!

Para começar, vamos supor que estamos à procura de uma nova casa na cidade de Nova Iorque. Queremos comprar uma propriedade com, pelo menos, dois quartos e, claro, uma casa de banho. Por isso, vamos começar a nossa pesquisa no Realtor, extrair dados de lá e compará-los para encontrar o melhor negócio.

Existem várias formas de extrair conteúdo de páginas Web. Este artigo explica dois métodos: um em que criamos o nosso Web scraper de raiz e outro em que utilizamos uma ferramenta já existente.

Primeiro, vamos tentar fazê-lo nós próprios. O código revelar-se-á útil mais tarde, quando utilizarmos uma ferramenta profissional de recolha de dados da Web.  

Criar um raspador da Web para extrair dados imobiliários

Optei por escrever em Python devido à sua popularidade na extração de dados da Web. Temos um tutorial de uso geral para extrair dados da Web em Python que você deve conferir!

Inspecionar o código do sítio Web

Os dados que precisamos de extrair podem ser encontrados nas etiquetas aninhadas da referida página Web. Antes de começarmos a extrair os dados, temos de os encontrar. Para o fazer, basta clicar com o botão direito do rato no elemento e selecionar "Inspecionar".

Menu do botão direito do rato do navegador numa imagem de um anúncio imobiliário, com a opção «Inspecionar» destacada

Aparecerá uma janela "Browser Inspetor Box", como esta:

Painel «Elementos» das Ferramentas do Desenvolvedor do Chrome a destacar o código HTML dos cartões de resultados de listagem de imóveis

Nesta janela, vamos navegar para encontrar as etiquetas e as classes em que se encontram os nossos dados essenciais. Pode parecer um pouco intimidante no início, mas torna-se mais fácil com a experiência!

Encontrar os dados que pretende extrair

We can see that everything we need to extract is within the <li> tag with the class ‘component_property-card’. If we go even deeper in the tag, we observe that the data referring to the number of beds and bathrooms are under the attribute ‘data-label’ with the values ‘pc-meta-beds’ and ‘pc-beta-baths’, respectively. Knowing this, we can proceed with writing our code!

Preparar o espaço de trabalho

Como já foi referido, vamos utilizar Python como linguagem de programação, pelo que é necessário descarregá-la e instalá-la.

Pode utilizar qualquer IDE com que se sinta confortável, mas eu recomendo a utilização do PyCharm.

Depois de ter criado um novo projeto, facilite o seu trabalho utilizando estas bibliotecas:

  • Selenium: Utilizado para testes na Web e automatização das actividades do browser.
  • BeautifulSoup: Utilizado para analisar documentos HTML e XML.
  • Pandas: Utilizado para a manipulação de dados. Os dados extraídos serão armazenados num formato estruturado.

Instalá-los dentro do projeto é bastante simples. Basta usar esta linha de comando no terminal do projeto: python -m pip install selenium beautifulsoup4 pandas

Escrever o código

Vamos começar por importar as bibliotecas que instalámos anteriormente:

from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd

Para extrair os dados do site, temos de os carregar configurando o webdriver para utilizar o navegador Chrome. Para isso, basta especificar o caminho onde o chromedriver está localizado. Não se esqueça de adicionar o nome do executável no final - não apenas a sua localização!

driver = webdriver.Chrome('your/path/here/chromedriver')

Para além do número de camas e casas de banho, também podemos extrair a morada, o preço e, porque não, o tamanho da propriedade. Quanto mais informações tivermos, mais fácil será decidir sobre uma nova casa.

Declare as variáveis e defina o URL do sítio Web a ser extraído.

preços = []
camas = []
casas de banho = []
tamanhos = []
endereços = []
driver.get('https://www.realtor.com/realestateandhomes-search/New-York_NY')

Precisamos de extrair os dados do sítio Web, que estão localizados nas etiquetas aninhadas, como explicado anteriormente. Encontre as etiquetas com os atributos mencionados anteriormente e guarde os dados nas variáveis declaradas acima. Lembre-se que só queremos guardar propriedades com pelo menos duas camas e uma casa de banho!

content = driver.page_source
soup = BeautifulSoup(content, features='html.parser')
for element in soup.findAll('li', attrs={'class': 'component_property-card'}):
   price = element.find('span', attrs={'data-label': 'pc-price'})
   bed = element.find('li', attrs={'data-label': 'pc-meta-beds'})
   bath = element.find('li', attrs={'data-label': 'pc-meta-baths'})
   size = element.find('li', attrs={'data-label': 'pc-meta-sqft'})
   address = element.find('div', attrs={'data-label': 'pc-address'})

   if bed and bath:
       nr_beds = bed.find('span', attrs={'data-label': 'meta-value'})
       nr_baths = bath.find('span', attrs={'data-label': 'meta-value'})

       if nr_beds and float(nr_beds.text) >= 2 and nr_baths and float(nr_baths.text) >= 1:
           beds.append(nr_beds.text)
           baths.append(nr_baths.text)

           if price and price.text:
               prices.append(price.text)
           else:
               prices.append('No display data')

           if size and size.text:
               sizes.append(size.text)
           else:
               sizes.append('No display data')

           if address and address.text:
               addresses.append(address.text)
           else:
               addresses.append('No display data')

Ótimo! Temos toda a informação de que precisamos, mas onde a devemos guardar? É aqui que a biblioteca pandas é útil e ajuda a estruturar os dados num ficheiro csv para utilizarmos no futuro.

df = pd.DataFrame({'Address': addresses, 'Price': prices, 'Beds': beds, 'Baths': baths, 'Sizes': sizes})
df.to_csv('listings.csv', index=False, encoding='utf-8')

Se executarmos o código, será criado um ficheiro chamado 'listings.csv' e, nele, os nossos preciosos dados!

Conseguimos! Criámos a nossa própria ferramenta de recolha de dados da Web! Agora vamos direto ao assunto e ver que passos temos de seguir e que linhas de código temos de modificar para utilizar uma ferramenta de recolha de dados.

Utilizar uma API de recolha de dados da Web

Para este cenário, vamos utilizar a WebScrapingAPI, como é óbvio.

Criar uma conta WebScrapingAPI gratuita

Para utilizar a WebScrapingAPI, é necessário criar uma conta. Não se preocupe, as primeiras 5000 chamadas à API são gratuitas e não precisa de partilhar quaisquer dados pessoais, como informações do cartão de crédito. Depois de criar a sua conta e validar o seu e-mail, podemos passar ao passo seguinte.

Chave API

Gráfico de integração em três etapas que mostra a chave de acesso à API, o API Playground e a integração na sua aplicação

Para utilizar o WebScrapingAPI, terá de se autenticar através da chave privada da API, que pode encontrar no painel de controlo da sua conta. Tenha em atenção que não deve partilhar esta chave com ninguém e, se suspeitar que foi comprometida, pode sempre redefinir a chave premindo o botão "Redefinir chave da API".

Modificar o código

Perfeito! Agora que tem a chave da API, vamos fazer as alterações necessárias.

Já não estaremos a utilizar um webdriver. Em vez disso, a biblioteca 'requests' enviará o pedido à WebScrapingAPI e obterá o código HTML do site como resposta.

importar requests
from bs4 import BeautifulSoup
import pandas as pd

Em seguida, temos de preparar alguns parâmetros para o pedido: o URL do sítio Web do qual pretendemos extrair dados (corretor de imóveis) e a nossa chave de API.

url = "https://api.webscrapingapi.com/v1"
params = {
 "api_key": "XXXXXXX",
 "url": "https://www.realtor.com/realestateandhomes-search/New-York_NY"
}
response = requests.request("GET", url, params=params)

Não se esqueça de alterar o conteúdo que o beautifulsoup está a analisar. Em vez da fonte do chromedriver, usaremos a resposta recebida da API.

conteúdo = response.text

Deste ponto em diante, você pode usar o mesmo código do cenário anterior. Os dados continuarão a ser armazenados num ficheiro CVS chamado 'listings.csv'.

Tudo pronto!

E é só isso: pode executar o código. A WebScrapingAPI fará o trabalho e obterá os dados necessários para encontrar a casa perfeita. Mas pode perguntar-se: "Qual é a diferença entre utilizar o WebScrapingAPI e o scraper que nós próprios construímos?". Bem, deixe-me explicar.

Bricolage vs. Pré-fabricado

Uma das vantagens mais significativas da utilização do WebScrapingAPI são os seus proxies. O serviço tem um enorme conjunto de proxies rotativos que garante o anonimato dos seus utilizadores enquanto navegam na Web.

Esta funcionalidade também é útil quando alguém pretende fazer scraping de um sítio Web em massa. Fazer vários pedidos a um sítio Web num curto espaço de tempo irá certamente bloquear o seu IP, pensando que se trata de uma tentativa de luto ou de um bot com más intenções.

A utilização de um pool de proxy rotativo fará com que o site pense que vários utilizadores estão a interagir com ele, para que não seja detectado e possa fazer scraping durante todo o dia.

Muitos outros obstáculos podem surgir quando se faz scraping na Web, como CAPTCHAs ou impressões digitais do navegador. Como seria de esperar, criámos a WebScrapingAPI para contornar todos esses obstáculos e facilitar ao máximo a extração de dados. Se quiser saber mais sobre este tópico, consulte o nosso artigo sobre os problemas mais comuns que os Web scrapers encontram.

Uma ferramenta, muitos casos de utilização

Todos concordamos que a recolha de dados da Web é uma excelente solução para o sector imobiliário, mas também pode ser utilizada para outros fins. Eis apenas alguns exemplos: monitorizar a sua concorrência, comparar preços de produtos e treinar algoritmos de aprendizagem automática.

Eu poderia continuar, mas isso já é um assunto totalmente novo. Não vou arrastar este artigo para sempre, por isso recomendo que veja estes sete casos de utilização de ferramentas de recolha de dados da Web.

Criar uma ferramenta de recolha de dados da Web no seu tempo livre parece bastante interessante, mas há muitas coisas a ter em conta, coisas que irão consumir uma quantidade considerável de tempo de desenvolvimento. Aqui pode encontrar uma discussão aprofundada sobre as ferramentas de raspagem da Web DIY vs. pré-fabricadas.

Se estivermos a falar de raspar algumas páginas Web, construir a ferramenta você mesmo pode ser uma solução rápida. Ainda assim, um trabalho profissional precisa de uma ferramenta profissional, idealmente uma API, WebScrapingAPI. Já mencionei o teste gratuito?

Sobre o autor
Robert Munceanu, Desenvolvedor Full-Stack na WebScrapingAPI
Robert MunceanuDesenvolvedor Full-Stack

Robert Munceanu é um programador Full Stack na WebScrapingAPI, contribuindo em todas as áreas do produto e ajudando a criar ferramentas e funcionalidades fiáveis que sustentam a plataforma.

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.