Zillow'dan gayrimenkul bilgilerini çıkarmak, piyasa ve yatırımlar için mükemmel analizler sunabilir. Bu yazı, Zillow emlak listelerini Python ile kazımayı tartışmayı amaçlamaktadır ve burada atılan temel adımlar ve yönergeler üzerinde durulacaktır. Bu kılavuz size requests ve lxml gibi kütüphaneleri kullanarak Zillow web sitesinden nasıl bilgi kazıyacağınızı gösterecektir.
Başlamadan önce, sisteminizde Python'un kurulu olduğundan emin olun. Ayrıca aşağıdaki kütüphaneleri de yüklemeniz gerekecektir:
pip install requests
pip install lxml
Zillow'dan veri ayıklamak için web sayfasının yapısını anlamanız gerekir. Zillow'da bir mülk listeleme sayfası açın ve kazımak istediğiniz öğeleri inceleyin (örneğin, mülk başlığı, kira tahmini fiyatı ve değerlendirme fiyatı).
Başlık:
Fiyat Detayları:
Şimdi HTTP istekleri gönderelim. İlk olarak, Zillow sayfasının HTML içeriğini almamız gerekiyor. Hedef URL'ye bir HTTP GET isteği göndermek için requests kütüphanesini kullanacağız. Ayrıca istek başlıklarını gerçek bir tarayıcı isteğini taklit edecek şekilde ayarlayacağız ve IP engellemesini önlemek için proxy kullanacağız.
import requests
# Zillow mülk listesi için hedef URL'yi tanımlama
url = "https://www.zillow.com/homedetails/1234-Main-St-Some-City-CA-90210/12345678_zpid/"
# İstek başlıklarını bir tarayıcı isteğini taklit edecek şekilde ayarlayın
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',
}
# İsteğe bağlı olarak, IP engellemesini önlemek için proxy'ler kurun
proxies = {
'http': 'http://username:password@your_proxy_address',
'https://username:password@your_proxy_address',
}
# HTTP GET isteğini başlıklar ve proxy'lerle birlikte gönderin
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
Daha sonra, lxml kullanarak HTML içeriğini ayrıştırmamız gerekir. Web sayfasının HTML içeriğini bir Element nesnesine ayrıştırmak için lxml.html modülündeki fromstring fonksiyonunu kullanacağız.
from lxml.html import fromstring
# HTML içeriğini lxml kullanarak ayrıştırma
parser = fromstring(response.text)
Şimdi, ayrıştırılmış HTML içeriğinde XPath sorgularını kullanarak mülk başlığı, kira tahmini fiyatı ve değerlendirme fiyatı gibi belirli veri noktalarını çıkaracağız.
# XPath kullanarak özellik başlığını çıkarma
title = ' '.join(parser.xpath('//h1[@class="Text-c11n-8-99-3__sc-aiai24-0 dFxMdJ"]/text()'))
# XPath kullanarak mülk kira tahmini fiyatını çıkarma
rent_estimate_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-2]
# XPath kullanarak mülk değerlendirme fiyatını çıkarma
assessment_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-1]
# Çıkarılan verileri bir sözlükte saklayın
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
Son olarak, çıkarılan verileri daha fazla işlem için bir JSON dosyasına kaydedeceğiz.
import json
# Çıktı JSON dosya adını tanımlayın
output_file = 'zillow_properties.json'
# Dosyayı yazma modunda açın ve verileri dökün
with open(output_file, 'w') as f:
json.dump(all_properties, f, indent=4)
print(f"Scraped data saved to {output_file}")
Birden fazla emlak listesini kazımak için, bir URL listesi üzerinde yineleyeceğiz ve her biri için veri çıkarma işlemini tekrarlayacağız.
# Kazınacak URL'lerin listesi
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/"
]
# Tüm mülkler için veri depolamak üzere liste
all_properties = []
for url in urls:
# HTTP GET isteğini başlıklar ve proxy'lerle birlikte gönderin
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
# HTML içeriğini lxml kullanarak ayrıştırma
parser = fromstring(response.text)
# XPath kullanarak veri ayıklama
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]
# Çıkarılan verileri bir sözlükte saklayın
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
# Özellik verilerini listeye ekleme
all_properties.append(property_data)
İşte Zillow emlak verilerini kazımak ve bir JSON dosyasına kaydetmek için eksiksiz kod:
import requests
from lxml.html import fromstring
import json
# Zillow emlak listeleri için hedef URL'leri tanımlama
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/"
]
# İstek başlıklarını bir tarayıcı isteğini taklit edecek şekilde ayarlayın
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',
}
# İsteğe bağlı olarak, IP engellemesini önlemek için proxy'ler kurun
proxies = {
'http': 'http://username:password@your_proxy_address',
'https': 'https://username:password@your_proxy_address',
}
# Tüm mülkler için veri depolamak üzere liste
all_properties = []
for url in urls:
try:
# HTTP GET isteğini başlıklar ve proxy'lerle birlikte gönderin
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
# HTML içeriğini lxml kullanarak ayrıştırma
parser = fromstring(response.text)
# XPath kullanarak veri ayıklama
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]
# Çıkarılan verileri bir sözlükte saklayın
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
# Özellik verilerini listeye ekleme
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}")
# Çıktı JSON dosya adını tanımlayın
output_file = 'zillow_properties.json'
# Dosyayı yazma modunda açın ve verileri dökün
with open(output_file, 'w') as f:
json.dump(all_properties, f, indent=4)
print(f"Scraped data saved to {output_file}")
HTML sayfalarının yapısını anlayarak ve requests ve lxml gibi güçlü kütüphanelerden yararlanarak, mülk ayrıntılarını verimli bir şekilde çıkarabilirsiniz. Proxy'ler kullanmak ve Kullanıcı Temsilcilerini döndürmek, engellenme riski olmadan Zillow gibi sitelere büyük miktarda istekte bulunmanızı sağlar. Bu faaliyetler için, statik ISP vekilleri veya dönüşümlü konut vekilleri en uygun seçenekler olarak kabul edilir.
Yorumlar: 0