Extrair informações de propriedades reais do Zillow pode oferecer uma análise perfeita para o mercado e investimentos. Este post tem como objetivo discutir a raspagem de listagens de propriedades do Zillow com Python, onde ele se concentrará nas etapas e diretrizes essenciais. Este guia mostrará como raspar informações do site Zillow usando bibliotecas como solicitações e lxml.
Antes de começarmos, verifique se você tem o Python instalado no seu sistema. Também será necessário instalar as seguintes bibliotecas:
pip install requests
pip install lxml
Para extrair dados do Zillow, você precisa entender a estrutura da página da Web. Abra uma página de listagem de propriedades no Zillow e inspecione os elementos que você deseja extrair (por exemplo, título da propriedade, preço estimado de aluguel e preço de avaliação).
Título:
Detalhes do preço:
Agora vamos enviar solicitações HTTP. Primeiro, precisamos buscar o conteúdo HTML da página do Zillow. Usaremos a biblioteca de solicitações para enviar uma solicitação HTTP GET para o URL de destino. Também configuraremos os cabeçalhos da solicitação para imitar uma solicitação real do navegador e usaremos proxies para evitar o bloqueio de IP.
import requests
# Definir o URL de destino para a listagem de imóveis do Zillow
url = "https://www.zillow.com/homedetails/1234-Main-St-Some-City-CA-90210/12345678_zpid/"
# Configurar os cabeçalhos do pedido para imitar um pedido do browser
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}
# Opcionalmente, configure proxies para evitar o bloqueio de IP
proxies = {
'http': 'http://username:password@your_proxy_address',
'https://username:password@your_proxy_address',
}
# Enviar o pedido HTTP GET com cabeçalhos e proxies
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
Em seguida, precisamos analisar o conteúdo HTML usando lxml. Usaremos a função fromstring do módulo lxml.html para analisar o conteúdo HTML da página da Web em um objeto Element.
from lxml.html import fromstring
# Analisar o conteúdo HTML utilizando lxml
parser = fromstring(response.text)
Agora, vamos extrair pontos de dados específicos, como o título da propriedade, o preço estimado do aluguel e o preço de avaliação usando consultas XPath no conteúdo HTML analisado.
# Extrair o título da propriedade utilizando XPath
title = ' '.join(parser.xpath('//h1[@class="Text-c11n-8-99-3__sc-aiai24-0 dFxMdJ"]/text()'))
# Extrair o preço estimado da renda do imóvel utilizando XPath
rent_estimate_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-2]
# Extrair o preço de avaliação do imóvel utilizando XPath
assessment_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-1]
# Armazenar os dados extraídos num dicionário
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
Por fim, salvaremos os dados extraídos em um arquivo JSON para processamento posterior.
import json
# Definir o nome do ficheiro JSON de saída
output_file = 'zillow_properties.json'
# Abrir o ficheiro em modo de escrita e descarregar os dados
with open(output_file, 'w') as f:
json.dump(all_properties, f, indent=4)
print(f"Scraped data saved to {output_file}")
Para extrair várias listagens de propriedades, vamos iterar sobre uma lista de URLs e repetir o processo de extração de dados para cada uma delas.
# Lista de URLs para recolha de dados
urls = [
"https://www.zillow.com/homedetails/1234-Main-St-Some-City-CA-90210/12345678_zpid/",
"https://www.zillow.com/homedetails/5678-Another-St-Some-City-CA-90210/87654321_zpid/"
]
# Lista para armazenar dados de todas as propriedades
all_properties = []
for url in urls:
# Enviar o pedido HTTP GET com cabeçalhos e proxies
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
# Analisar o conteúdo HTML utilizando lxml
parser = fromstring(response.text)
# Extrair dados utilizando XPath
title = ' '.join(parser.xpath('//h1[@class="Text-c11n-8-99-3__sc-aiai24-0 dFxMdJ"]/text()'))
rent_estimate_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-2]
assessment_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-1]
# Armazenar os dados extraídos num dicionário
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
# Anexar os dados do imóvel à lista
all_properties.append(property_data)
Aqui está o código completo para raspar os dados da propriedade Zillow e salvá-los em um arquivo JSON:
import requests
from lxml.html import fromstring
import json
# Definir os URLs de destino para as listagens de imóveis do Zillow
urls = [
"https://www.zillow.com/homedetails/1234-Main-St-Some-City-CA-90210/12345678_zpid/",
"https://www.zillow.com/homedetails/5678-Another-St-Some-City-CA-90210/87654321_zpid/"
]
# Configurar os cabeçalhos do pedido para imitar um pedido do browser
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}
# Opcionalmente, configure proxies para evitar o bloqueio de IP
proxies = {
'http': 'http://username:password@your_proxy_address',
'https': 'https://username:password@your_proxy_address',
}
# Lista para armazenar dados de todas as propriedades
all_properties = []
for url in urls:
try:
# Enviar o pedido HTTP GET com cabeçalhos e proxies
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
# Analisar o conteúdo HTML utilizando lxml
parser = fromstring(response.text)
# Extrair dados utilizando XPath
title = ' '.join(parser.xpath('//h1[@class="Text-c11n-8-99-3__sc-aiai24-0 dFxMdJ"]/text()'))
rent_estimate_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-2]
assessment_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-1]
# Armazenar os dados extraídos num dicionário
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
# Anexar os dados do imóvel à lista
all_properties.append(property_data)
except requests.exceptions.HTTPError as e:
print(f"HTTP error occurred: {e}")
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
# Definir o nome do ficheiro JSON de saída
output_file = 'zillow_properties.json'
# Abrir o ficheiro em modo de escrita e descarregar os dados
with open(output_file, 'w') as f:
json.dump(all_properties, f, indent=4)
print(f"Scraped data saved to {output_file}")
Compreendendo a estrutura das páginas HTML e tirando partido de bibliotecas poderosas, como requests e lxml, pode extrair eficientemente detalhes de propriedades. A utilização de proxies e de User-Agents rotativos permite-lhe fazer um grande volume de pedidos a sites como o Zillow sem o risco de ser bloqueado. Para estas actividades, os proxies ISP estáticos ou os proxies residenciais rotativos são considerados escolhas óptimas.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Comentários: 0