Ferramentas de raspagem de dados para raspagem de dados imobiliários usando Python

Publicados: 2019-08-12
Índice mostrar
Por que rastrear dados de sites imobiliários?
Como raspar dados imobiliários usando Python?
Onde está o Código?
Explicação do código
Algumas das listagens da casa que raspamos
Raspagem de dados imobiliários em grande escala

Os principais sites imobiliários do mundo são um tesouro de dados valiosos. O banco de dados de qualquer site imobiliário americano popular pode conter informações sobre mais de 100 milhões de residências. Essas casas incluem as para venda, aluguel ou até mesmo as que não estão atualmente no mercado. A raspagem de dados imobiliários também fornece dados para estimativas de aluguel e propriedade chamados “Zestimates”. Ele ajuda os proprietários, assim como os clientes, a planejar melhor, tentando estimar os preços das propriedades nos próximos anos.

Quando se trata de comprar ou alugar imóveis, sabemos que a primeira coisa que vem à mente é a comparação de preços. Esses sites de moradia oferecem comparação de preços com todos os anúncios dessa área, além de informações básicas como o tipo de casa, número de quartos, tamanho, uma breve descrição, etc.

Por que rastrear dados de sites imobiliários?

As grandes empresas de listagem de propriedades têm como alvo uma região inteira e trabalham em milhões de propriedades. Mas caso você seja um corretor de imóveis, em vez de tentar coletar dados manualmente por conta própria, você pode rastrear melhor os dados de um grande site de listagem de imóveis.

Você também pode construir modelos de Machine Learning para prever os preços das propriedades e comparar suas previsões com Zestimates da Zillow e ver qual é melhor ou mais próximo dos valores reais.

Como raspar dados imobiliários usando Python?

Caso você tenha seguido qualquer um dos nossos artigos anteriores “Como rastrear ou scape”, você já deve ter a configuração necessária pronta em seus computadores. Caso você não tenha, eu recomendo que você siga este artigo para configurar o python de raspagem de dados, seus pacotes e o editor de texto antes que você possa sujar as mãos com o código.

Onde está o Código?

Sem muita enrolação, resolvemos trazer para você o código para raspagem de dados imobiliários usando python que vai te ajudar a extrair informações de um site de listagem de imóveis. O código de rastreamento de dados é escrito em Python e, posteriormente, mostrarei como executá-lo e o que você obterá depois de executá-lo.

[linguagem de código=”python”]
#!/usr/bin/python
# -*- codificação: utf-8 -*-

importar urllib.request
importar urllib.parse
importar urllib.error
de bs4 importe BeautifulSoup
importar ssl
importar json
importação ast
importar SO
de urllib.request solicitação de importação, urlopen

# Para ignorar erros de certificado SSL

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

# Entrada do usuário

url = input('Digite o URL de listagem da casa Zillow- ')

# Fazendo o site acreditar que você está acessando usando um navegador mozilla

req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
página da web = urlopen(req).read()

# Criando um objeto BeautifulSoup da página html para fácil extração de dados.

sopa = BeautifulSoup(página da web, 'html.parser')
html = sopa.prettify('utf-8')
property_json = {}
property_json['Details_Broad'] = {}
property_json['Endereço'] = {}

# Extraia o título da listagem do imóvel

para título em soup.findAll('title'):
property_json['Title'] = title.text.strip()
parar

para meta em soup.findAll('meta', attrs={'name': 'description'}):
property_json['Detail_Short'] = meta['content'].strip()

para div em soup.findAll('div', attrs={'class': 'character-count-truncated'}):
property_json['Details_Broad']['Description'] = div.text.strip()

for (i, script) em enumerate(soup.findAll('script',
attrs={'type': 'application/ld+json'})):
se eu == 0:
json_data = json.loads(script.text)
property_json['Details_Broad']['Number of Rooms'] = json_data['numberOfRooms']
property_json['Details_Broad']['Floor Size (in sqft)'] = json_data['floorSize']['value']
property_json['Address']['Street'] = json_data['address']['streetAddress']
property_json['Address']['Locality'] = json_data['address']['addressLocality']
property_json['Address']['Region'] = json_data['address']['addressRegion']
property_json['Address']['Postal Code'] = json_data['address']['postalCode']
se eu == 1:
json_data = json.loads(script.text)
property_json['Preço em $'] = json_data['offers']['price']
property_json['Image'] = json_data['image']
parar

com open('data.json', 'w') como outfile:
json.dump(property_json, outfile, indent=4)

com open('output_file.html', 'wb') como arquivo:
arquivo.write(html)

print('———-A extração dos dados foi concluída. Verifique o arquivo json.———-')
[/código]

Para executar o código fornecido acima, você precisa salvá-lo em um arquivo com a extensão, como propertyScraper.py. Feito isso, no terminal, execute o comando –

[linguagem de código=”python”]
python propertyScraper.py
[/código]

Ao executá-lo, você será solicitado a inserir o URL de uma listagem de propriedades. Esta é a página da Web que será realmente rastreada para dados pelo programa. Usamos dois links e raspamos os dados de duas propriedades. Aqui estão os links -

  1. https://www.zillow.com/homedetails/638-Grant-Ave-North-Baldwin-NY-11510/31220792_zpid/
  2. https://www.zillow.com/homedetails/10-Walnut-St-Arlington-MA-02476/56401372_zpid/

Os arquivos JSON obtidos ao executar o código no dado em um subtópico posterior.

Explicação do código

Antes de entrar em como o código é executado e o que ele retorna, é importante entender o próprio código. Como de costume, primeiro acessamos o URL fornecido e capturamos todo o HTML que convertemos em um belo objeto de sopa. Feito isso, extraímos divs, scripts, títulos e outras tags específicas com atributos específicos. Dessa forma, podemos identificar informações específicas que podemos querer extrair de uma página.

Você pode ver que também extraímos um link de imagem para cada propriedade. Isso foi feito deliberadamente, pois para algo como imóveis, as imagens têm tanto valor quanto outras informações. Embora tenhamos realmente extraído vários campos das páginas de listagem de imóveis, deve-se notar que a página HTML contém muito mais pontos de dados. Por isso, também estamos salvando o conteúdo HTML localmente para que você possa passar por ele e rastrear mais informações.

Algumas das listagens da casa que raspamos

Como mencionamos anteriormente, na verdade rastreamos algumas listagens de propriedades para mostrar como os dados extraídos do Python ficariam no formato JSON. Além disso, mencionamos a propriedade para a qual um determinado JSON é, sob o JSON. Agora vamos falar sobre os pontos de dados que raspamos.

Conseguimos uma imagem da propriedade (embora muitas imagens para cada propriedade estejam disponíveis em uma página de listagem, temos uma para cada - que é a imagem superior de cada listagem). Também obtivemos o preço (em $) em que está listado, o título da propriedade e uma descrição que o ajudaria a criar uma imagem mental da propriedade.

Junto com isso, raspamos o endereço, dividido em quatro partes separadas: a rua, a localidade, a região e o código postal. Temos outro campo de detalhes que possui vários subcampos, como o número de quartos, o tamanho do andar e uma descrição longa. Em certos casos, a descrição está faltando, pois descobrimos depois de raspar várias páginas.

[linguagem de código=”python”]
{
“Detalhes_Amplo”: {
“Número de quartos”: 4,
“Tamanho do piso (em pés quadrados)”: “1.728”
},
"Endereço": {
“Rua”: “638 Grant Ave”,
“Localidade”: “baldwin norte”,
“Região”: “NY”,
“Código postal”: “11510”
},
“Título”: “638 Grant Ave, North Baldwin, NY 11510 | MLS #3137924 | Zillow”,
“Detail_Short”: “638 Grant Ave, North baldwin, NY 11510-1332 é uma casa unifamiliar listada à venda por US$ 299.000. A casa de 1.728 pés quadrados é uma propriedade de 4 quartos e 2 banheiros. Encontre 31 fotos da casa 638 Grant Ave em Zillow. Veja mais detalhes da propriedade, histórico de vendas e dados Zestimate no Zillow. MLS # 3137924”,
“Preço em $”: 299000,
“Imagem”: “https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg”
}
[/código]

[linguagem de código=”python”]
{
“Detalhes_Amplo”: {
“Descrição”: “Casa unifamiliar de três águas-furtadas situada no bairro de Brattle, em Arlington, entre Arlington Heights e Arlington Center. Construída na década de 1920, esta casa oferece belos detalhes de época, pisos de madeira dura, tetos com vigas, sala de estar com lareira privativa, sala de jantar formal, três quartos grandes, um escritório e dois banheiros. O potencial de melhorar esta propriedade para expandir o espaço de vida e personalizar ao seu gosto pessoal é excepcional. Perto da Minuteman Commuter Bikeway, Rt 77 e 79 linhas de ônibus, escolas, shopping e restaurantes. Encenação virtual e fotos virtuais de renovação fornecidas para ajudá-lo a visualizar.”,
“Número de quartos”: 4,
“Tamanho do piso (em pés quadrados)”: “2.224”
},
"Endereço": {
“Rua”: “10 Walnut St”,
“Localidade”: “Arlington”,
“Região”: “MA”,
“Código postal”: “02476”
},
“Título”: “10 Walnut St, Arlington, MA 02476 | MLS #72515880 | Zillow”,
“Detail_Short”: “10 Walnut St , Arlington, MA 02476-6116 é uma casa unifamiliar listada à venda por US$ 725.000. A casa de 2.224 pés quadrados é uma propriedade de 4 quartos e 2 banheiros. Encontre 34 fotos da casa 10 Walnut St em Zillow. Veja mais detalhes da propriedade, histórico de vendas e dados Zestimate no Zillow. MLS # 72515880”,
“Preço em $”: 725000,
“Imagem”: “https://photos.zillowstatic.com/p_h/ISifzwig3xt2re1000000000.jpg”
}
[/código]

[linguagem de código=”python”]
{
“Detalhes_Amplo”: {
“Número de quartos”: 4,
“Tamanho do piso (em pés quadrados)”: “1.728”
},
"Endereço": {
“Rua”: “638 Grant Ave”,
“Localidade”: “baldwin norte”,
“Região”: “NY”,
“Código postal”: “11510”
},
“Título”: “638 Grant Ave, North Baldwin, NY 11510 | MLS #3137924 | Zillow”,
“Detail_Short”: “638 Grant Ave, North baldwin, NY 11510-1332 é uma casa unifamiliar listada à venda por US$ 299.000. A casa de 1.728 pés quadrados é uma propriedade de 4 quartos e 2 banheiros. Encontre 31 fotos da casa 638 Grant Ave em Zillow. Veja mais detalhes da propriedade, histórico de vendas e dados Zestimate no Zillow. MLS # 3137924”,
“Preço em $”: 299000,
“Imagem”: “https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg”
}
[/código]

Raspagem de dados imobiliários em grande escala

Usando um código como esse, você pode rastrear detalhes relacionados apenas a algumas propriedades imobiliárias específicas. Você pode verificar manualmente as propriedades em que está interessado de tempos em tempos. No entanto, se você deseja segmentar uma região específica nos EUA ou internacionalmente, precisará de um provedor de serviços de raspagem da Web especializado ou ferramentas de raspagem de dados para ajudá-lo a coletar listagens de propriedades de vários sites.

A PromptCloud, como um provedor líder de web scraping, acredita que as soluções de web scraping devem ser livres de problemas e devem conter apenas duas etapas – o cliente fornece o requisito e recebe dados limpos.

Além disso, observe aqui no blog que usamos rastreador e raspador. Não se confunda mais ou menos ambos são iguais, mas se você quiser saber mais, você pode conferir nosso blog sobre rastreamento de dados da web versus raspagem de dados da web.


Isenção de responsabilidade: O código presente em nosso tutorial é apenas para fins de aprendizado. Não seremos responsáveis ​​pela forma como é usado e não haverá responsabilidade de nossa parte por qualquer efeito adverso do código-fonte. A mera presença deste código em nosso site não implica que promovamos a raspagem ou rastreamento dos sites mencionados no artigo. O único objetivo deste tutorial é mostrar a técnica de escrever web scrapers para os principais portais da web. No entanto, não somos obrigados a fornecer qualquer suporte para o código; recomendamos que você adicione suas perguntas e comentários na seção de comentários para que possamos verificar e responder em determinados intervalos .