Python Kullanarak Gayrimenkul Verilerini Kazımak için Veri Kazıma Araçları

Yayınlanan: 2019-08-12
İçindekiler gösterisi
Neden Emlak Sitelerinden Veri Taramalısınız?
Python Kullanarak Gayrimenkul Verilerini Nasıl Kazıyabilirsiniz?
Kod nerede?
Kod Açıklama
Kazıdığımız Ev Listelerinden Bazıları
Gayrimenkul Verilerini Büyük Ölçekte Kazıma

Dünyanın önde gelen emlak siteleri, değerli verilerden oluşan bir hazinedir. Herhangi bir popüler ABD emlak sitesinin veri tabanı 100 milyondan fazla ev hakkında bilgi içerebilir. Bu evler satılık, kiralık ve hatta şu anda piyasada olmayanları içerir. Gayrimenkul verilerinin kazınması, “Zestimates” adı verilen kira ve mülk tahminleri için de veri sağlar. Önümüzdeki yıllarda mülk fiyatlarını tahmin etmeye çalışarak sahiplerin yanı sıra müşterilerin daha iyi plan yapmasına yardımcı olur.

Gayrimenkul satın almak veya kiralamak denilince akla ilk gelen şeyin fiyat karşılaştırması olduğunu biliyoruz. Bu konut siteleri, o bölgedeki tüm listelerle fiyat karşılaştırmasının yanı sıra ev tipi, oda sayısı, büyüklük, kısa bir açıklama vb. gibi temel bilgiler sağlar.

Neden Emlak Sitelerinden Veri Taramalısınız?

Büyük emlak listeleme şirketleri, tüm bir bölgeyi hedefler ve milyonlarca mülk üzerinde çalışır. Ancak bir emlakçıysanız, verileri kendiniz manuel olarak toplamaya çalışmak yerine, büyük bir emlak listeleme web sitesinden verileri daha iyi tarayabilirsiniz.

Ayrıca mülklerin fiyatlarını tahmin etmek ve tahminlerinizi Zillow's Zestimates ile karşılaştırmak ve hangisinin daha iyi veya gerçek değerlere daha yakın olduğunu görmek için Makine Öğrenimi modelleri oluşturabilirsiniz.

Python Kullanarak Gayrimenkul Verilerini Nasıl Kazıyabilirsiniz?

Önceki “Tarama veya scape nasıl yapılır” makalelerimizden herhangi birini izlediyseniz, bilgisayarlarınızda gerekli kurulum zaten hazır olabilir. Yapmadıysanız, kodla ellerinizi kirletmeden önce veri kazıma python, paketleri ve metin düzenleyicisini ayarlamak için bu makaleyi izlemenizi tavsiye ederim.

Kod nerede?

Lafı fazla uzatmadan, emlak listeleme web sitesinden bilgi almanıza yardımcı olacak python kullanarak emlak verilerini kazıma kodunu size getirmeye karar verdik. Veri tarama kodu Python'da yazılmıştır ve daha sonra size nasıl çalıştırılacağını ve çalıştırdığınızda ne elde edeceğinizi göstereceğim.

[kod dili=”python”]
#!/usr/bin/python
# -*- kodlama: utf-8 -*-

urllib.request'i içe aktar
urllib.parse'ı içe aktar
urllib.error'ı içe aktar
bs4'ten BeautifulSoup'u içe aktarın
ssl'yi içe aktar
json'u içe aktar
ithalat ast
işletim sistemini içe aktar
urllib.request'ten içe aktarma İsteği, urlopen

# SSL sertifika hatalarını yok saymak için

ctx = ssl.create_default_context()
ctx.check_hostname = Yanlış
ctx.verify_mode = ssl.CERT_NONE

# Kullanıcıdan giriş

url = input('Zillow House Listeleme URL'sini Girin-')

# Web sitesini bir mozilla tarayıcısı kullanarak girdiğinize inandırmak

req = İstek(url, başlıklar={'User-Agent': 'Mozilla/5.0'})
web sayfası = urlopen(req).read()

# Verilerin kolayca çıkarılması için html sayfasının bir BeautifulSoup nesnesi oluşturma.

çorba = BeautifulSoup(web sayfası, 'html.parser')
html = çorba.prettify('utf-8')
property_json = {}
property_json['Details_Broad'] = {}
property_json['Adres'] = {}

# Mülk listesinin Başlığını Çıkarın

çorba.findAll('title') içindeki başlık için:
property_json['Title'] = title.text.strip()
kırmak

çorba.findAll('meta', attrs={'name': 'description'}) içindeki meta için:
property_json['Detail_Short'] = meta['content'].strip()

div için çorba.findAll('div', attrs={'class': 'character-count-truncated'}):
property_json['Details_Broad']['Açıklama'] = div.text.strip()

(i, komut dosyası) için enumerate(soup.findAll('script',
attrs={'type': 'application/ld+json'})):
eğer ben == 0:
json_data = json.loads(script.text)
property_json['Details_Broad']['Oda Sayısı'] = json_data['Oda Sayısı']
property_json['Details_Broad']['Kat Boyutu (sqft cinsinden)'] = json_data['floorSize']['değer']
property_json['Adres']['Sokak'] = json_data['adres']['sokakAdresi']
property_json['Adres']['Yer'] = json_data['adres']['adresYer']
property_json['Adres']['Bölge'] = json_data['adres']['adresBölge']
property_json['Adres']['Posta Kodu'] = json_data['adres']['postaKodu']
eğer ben == 1:
json_data = json.loads(script.text)
property_json['$ cinsinden fiyat'] = json_data['teklifler']['fiyat']
property_json['Image'] = json_data['image']
kırmak

outfile olarak open('data.json', 'w') ile:
json.dump(property_json, dış dosya, girinti=4)

dosya olarak open('output_file.html', 'wb') ile:
dosya.write(html)

print ('———-Verilerin çıkarılması tamamlandı. json dosyasını kontrol edin.———-')
[/kod]

Yukarıda verilen kodu çalıştırmak için, propertyScraper.py gibi uzantılı bir dosyaya kaydetmeniz gerekir. Bu yapıldıktan sonra, terminalden komutu çalıştırın -

[kod dili=”python”]
python propertyScraper.py
[/kod]

Çalıştırdığınızda, bir mülk listesinin URL'sini girmeniz istenecektir. Bu, program tarafından veri için gerçekten taranacak olan web sayfasıdır. İki bağlantı kullandık ve iki mülkün verilerini kazıdık. İşte bağlantılar -

  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/

Daha sonraki bir alt konuda verilen kodu çalıştırarak elde edilen JSON dosyaları.

Kod Açıklama

Kodun nasıl çalıştığına ve ne döndürdüğüne geçmeden önce kodun kendisini anlamak önemlidir. Her zamanki gibi, önce verilen URL'ye basıyoruz ve güzel bir çorba nesnesine dönüştürdüğümüz tüm HTML'yi yakalıyoruz. Bu yapıldıktan sonra, belirli div'leri, komut dosyalarını, başlıkları ve belirli niteliklere sahip diğer etiketleri çıkarırız. Bu şekilde, bir sayfadan çıkarmak isteyebileceğimiz belirli bilgileri tam olarak belirleyebiliriz.

Her mülk için bir resim bağlantısı da çıkardığımızı görebilirsiniz. Bu, emlak gibi bir şey için, görüntüler en az diğer bilgiler kadar değerli olduğu için kasıtlı olarak yapılmıştır. Emlak listeleme sayfalarından gerçekten birkaç alan çıkarmış olsak da, HTML sayfasının çok daha fazla veri noktası içerdiğine dikkat edilmelidir. Bu nedenle, HTML içeriğini yerel olarak kaydediyoruz, böylece onu gözden geçirebilir ve daha fazla bilgi tarayabilirsiniz.

Kazıdığımız Ev Listelerinden Bazıları

Daha önce de belirttiğimiz gibi, Python tarafından kazınan verilerin JSON biçiminde nasıl görüneceğini size göstermek için aslında birkaç mülk listesini taradık. Ayrıca, JSON altında belirli bir JSON'un hangi özelliğinden bahsetmiştik. Şimdi sıyırdığımız veri noktalarından bahsedelim.

Mülkün bir resmini aldık (bir listeleme sayfasında her mülk için birçok resim mevcut olsa da, her biri için bir tane var - bu, her listenin en üstteki resmidir). Ayrıca, listelendiği fiyatı ($ cinsinden), mülkün başlığını ve mülkün zihinsel bir resmini oluşturmanıza yardımcı olacak bir açıklamasını aldık.

Bununla birlikte, adresi dört ayrı bölüme ayırdık: sokak, mahalle, bölge ve posta kodu. Oda sayısı, kat büyüklüğü ve uzun bir açıklama gibi birden çok alt alanı olan başka bir ayrıntı alanımız var. Bazı durumlarda, birden fazla sayfayı kazıdığımızda öğrendiğimiz gibi açıklama eksik.

[kod dili=”python”]
{
"Detaylar_Geniş": {
“Oda Sayısı”: 4,
“Kat Boyutu (sqft olarak)”: “1.728”
},
"Adres": {
“Sokak”: “638 Grant Ave”,
“Yer”: “Kuzey Baldwin”,
“Bölge”: “NY”,
“Posta Kodu”: “11510”
},
“Başlık”: “638 Grant Ave, Kuzey Baldwin, NY 11510 | MLS #3137924 | Zil",
"Detail_Short": "638 Grant Ave , North baldwin, NY 11510-1332, 299.000 $'dan satılık olarak listelenen tek ailelik bir evdir. 1.728 metrekarelik ev, 4 yataklı, 2.0 banyolu bir mülktür. Zillow'daki 638 Grant Ave evinin 31 fotoğrafını bulun. Zillow'da daha fazla mülk ayrıntısını, satış geçmişini ve Zestimate verilerini görüntüleyin. MLS#3137924”,
“$ cinsinden fiyat”: 299000,
“Resim”: “https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg”
}
[/kod]

[kod dili=”python”]
{
"Detaylar_Geniş": {
“Açıklama”: “Arlington'ın Brattle semtinde, Arlington Heights ve Arlington Center arasında yer alan üç çatı katında müstakil ev. 1920'lerde inşa edilen bu ev, güzel dönem detayları, sert ahşap zeminler, kirişli tavanlar, özel güneşlenme odalı şömineli oturma odası, resmi bir yemek odası, üç büyük yatak odası, bir ofis ve iki tam banyo sunmaktadır. Yaşam alanını genişletmek ve kişisel zevkinize göre kişiselleştirmek için bu mülkü geliştirme potansiyeli olağanüstü. Minuteman Banliyö Bisiklet Yolu, Rt 77 ve 79 Otobüs hatlarına, okullara, alışveriş ve restoranlara yakındır. Görselleştirmenize yardımcı olmak için sağlanan sanal sahneleme ve sanal yenileme fotoğrafları.”,
“Oda Sayısı”: 4,
“Kat Boyutu (sqft olarak)”: “2.224”
},
"Adres": {
“Sokak”: “10 Ceviz Sokak”,
“Yer”: “Arlington”,
“Bölge”: “MA”,
“Posta Kodu”: “02476”
},
“Başlık”: “10 Walnut St, Arlington, MA 02476 | MLS #72515880 | Zil",
"Detail_Short": "10 Walnut St , Arlington, MA 02476-6116, 725.000 $ fiyatla satılık olarak listelenen tek ailelik bir evdir. 2.224 metrekarelik ev, 4 yataklı, 2.0 banyolu bir mülktür. Zillow'daki 10 Walnut St evinin 34 fotoğrafını bulun. Zillow'da daha fazla mülk ayrıntısını, satış geçmişini ve Zestimate verilerini görüntüleyin. MLS#72515880”,
"$ cinsinden fiyat": 725000,
“Resim”: “https://photos.zillowstatic.com/p_h/ISifzwig3xt2re1000000000.jpg”
}
[/kod]

[kod dili=”python”]
{
"Detaylar_Geniş": {
“Oda Sayısı”: 4,
“Kat Boyutu (sqft olarak)”: “1.728”
},
"Adres": {
“Sokak”: “638 Grant Ave”,
“Yer”: “Kuzey Baldwin”,
“Bölge”: “NY”,
“Posta Kodu”: “11510”
},
“Başlık”: “638 Grant Ave, Kuzey Baldwin, NY 11510 | MLS #3137924 | Zil",
"Detail_Short": "638 Grant Ave , North baldwin, NY 11510-1332, 299.000 $'dan satılık olarak listelenen tek ailelik bir evdir. 1.728 metrekarelik ev, 4 yataklı, 2.0 banyolu bir mülktür. Zillow'daki 638 Grant Ave evinin 31 fotoğrafını bulun. Zillow'da daha fazla mülk ayrıntısını, satış geçmişini ve Zestimate verilerini görüntüleyin. MLS#3137924”,
“$ cinsinden fiyat”: 299000,
“Resim”: “https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg”
}
[/kod]

Gayrimenkul Verilerini Büyük Ölçekte Kazıma

Bunun gibi bir kod kullanarak, yalnızca birkaç belirli gayrimenkul mülküyle ilgili ayrıntıları tarayabilirsiniz. Zaman zaman ilgilendiğiniz mülkleri manuel olarak kontrol edebilirsiniz. Ancak, ABD'de veya uluslararası olarak belirli bir bölgeyi hedeflemek istiyorsanız, bir dizi web sitesinden mülk listelerini toplamanıza yardımcı olacak uzman bir web kazıma servis sağlayıcısına veya veri kazıma araçlarına ihtiyacınız olacaktır.

PromptCloud, önde gelen bir web kazıma sağlayıcısı olarak web kazıma çözümlerinin sorunsuz olması gerektiğine ve yalnızca iki adım içermesi gerektiğine inanmaktadır - müşteri gereksinimi verir ve temiz veri alır.

Ayrıca, blogda hem tarayıcı hem de kazıyıcı kullandığımızı unutmayın. Kafanız karışmasın, ikisi de aynıdır, ancak daha fazlasını öğrenmek istiyorsanız, web veri tarama ve web veri kazıma konusundaki blogumuzu inceleyebilirsiniz.


Sorumluluk Reddi: Eğitimimizde bulunan kod yalnızca öğrenme amaçlıdır. Kullanım şeklinden biz sorumlu olmayacağız ve kaynak kodun herhangi bir olumsuz etkisi için tarafımızca hiçbir sorumluluk kabul edilmeyecektir. Sitemizde yalnızca bu kodun bulunması , makalede bahsedilen web sitelerinin taranmasını veya taranmasını teşvik ettiğimiz anlamına gelmez . Bu öğreticinin tek amacı, önde gelen web portalları için web kazıyıcı yazma tekniğini sergilemektir. Ancak, kod için herhangi bir destek sağlamakla yükümlü değiliz; Belirli aralıklarla kontrol edip yanıt verebilmemiz için sorularınızı ve görüşlerinizi yorum bölümüne eklemenizi öneririz .