Instrumente de răzuire a datelor pentru răzuirea datelor imobiliare folosind Python
Publicat: 2019-08-12Cele mai importante site-uri imobiliare din lume sunt un tezaur de date valoroase. Baza de date a oricărui site imobiliar popular din SUA poate conține informații despre mai mult de 100 de milioane de case. Aceste case includ pe cele de vânzare, închiriere sau chiar pe cele care nu se află în prezent pe piață. Razuirea datelor imobiliare oferă și date pentru chirie și estimări de proprietate numite „Zestimates”. Ajută proprietarii, precum și clienții să planifice mai bine încercând să estimeze prețurile proprietăților în următorii ani.
Când vine vorba de cumpărarea sau închirierea proprietăților, știm că primul lucru care ne vine în minte este compararea prețurilor. Aceste site-uri pentru locuințe oferă o comparație a prețurilor cu toate anunțurile din zona respectivă, precum și informații de bază precum tipul de casă, numărul de camere, dimensiunea, o scurtă descriere etc.
De ce să accesați cu crawlere datele de pe site-uri imobiliare?
Marile companii de listare a proprietăților vizează o întreagă regiune și lucrează la milioane de proprietăți. Dar, în cazul în care sunteți un agent imobiliar, în loc să încercați să culegeți manual datele de unul singur, puteți accesa cu crawlere datele de pe un site principal de listări imobiliare.
De asemenea, puteți construi modele de învățare automată pentru a prezice prețurile proprietăților și pentru a vă compara previziunile cu estimările Z ale Zillow și pentru a vedea care dintre ele este mai bună sau mai apropiată de valorile reale.
Cum să răzuiți datele imobiliare folosind Python?
În cazul în care ați urmat oricare dintre articolele noastre anterioare „Cum să accesați cu crawlere sau să scapă”, este posibil să aveți deja pregătită configurarea necesară pe computerele dvs. În cazul în care nu ați făcut-o, vă recomand să urmați acest articol pentru a configura data scraping python, pachetele sale și editorul de text înainte de a vă murdari mâinile cu codul.
Unde este Codul?
Fără prea multă grămadă, am decis să vă aducem codul pentru răzuirea datelor imobiliare folosind python, care vă va ajuta să extrageți informații de pe un site web de listare a proprietăților. Codul de crawling al datelor este scris în Python și, ulterior, vă voi arăta cum să îl rulați și ce veți obține odată ce îl rulați.
[limbajul codului=”python”]
#!/usr/bin/python
# -*- codificare: utf-8 -*-
import urllib.request
import urllib.parse
import urllib.error
de la bs4 import BeautifulSoup
import ssl
import json
import ast
import os
din urllib.request import Request, urlopen
# Pentru ignorarea erorilor de certificat SSL
ctx = ssl.create_default_context()
ctx.check_hostname = Fals
ctx.verify_mode = ssl.CERT_NONE
# Intrare de la utilizator
url = input('Introduceți URL-ul Zillow House- ')
# A face site-ul web să creadă că îl accesați folosind un browser Mozilla
req = Solicitare(url, headers={'User-Agent': 'Mozilla/5.0'})
pagina web = urlopen(req).read()
# Crearea unui obiect BeautifulSoup al paginii html pentru extragerea ușoară a datelor.
supă = BeautifulSoup (pagina web, 'html.parser')
html = sup.prettify('utf-8')
property_json = {}
property_json['Details_Broad'] = {}
property_json['Adresa'] = {}
# Extrageți titlul listei de proprietate
pentru titlu în sup.findAll('titlu'):
property_json['Titlu'] = title.text.strip()
pauză
pentru meta în soup.findAll('meta', attrs={'name': 'description'}):
property_json['Detail_Short'] = meta['conținut'].strip()
pentru div în soup.findAll('div', attrs={'class': 'character-count-truncated'}):
property_json['Details_Broad']['Description'] = div.text.strip()
pentru (i, script) în enumerate(soup.findAll('script',
attrs={'type': 'application/ld+json'})):
dacă i == 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['Adresa']['Street'] = json_data['adresa']['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']
dacă i == 1:
json_data = json.loads(script.text)
property_json['Prețul în $'] = json_data['oferte']['preț']
property_json['Imagine'] = json_data['imagine']
pauză
cu open('data.json', 'w') ca fişier de ieşire:
json.dump(property_json, outfile, indent=4)
cu open('output_file.html', 'wb') ca fișier:
file.write(html)
print ('———-Extragerea datelor este completă. Verificați fișierul json.———-')
[/cod]
Pentru a rula codul de mai sus, trebuie să-l salvați într-un fișier cu extensia, cum ar fi propertyScraper.py. Odată ce este făcut, din terminal, rulați comanda -
[limbajul codului=”python”]
python propertyScraper.py
[/cod]
Când îl rulați, vi se va solicita să introduceți adresa URL a unei liste de proprietăți. Aceasta este pagina web care va fi de fapt accesată cu crawlere pentru date de către program. Am folosit două legături și am răzuit datele a două proprietăți. Iată link-urile -
- https://www.zillow.com/homedetails/638-Grant-Ave-North-Baldwin-NY-11510/31220792_zpid/
- https://www.zillow.com/homedetails/10-Walnut-St-Arlington-MA-02476/56401372_zpid/
Fișierele JSON obținute la rularea codului pe cea dată într-un subtopic ulterior.

Explicația codului
Înainte de a vedea cum rulează codul și ce returnează, este important să înțelegeți codul în sine. Ca de obicei, accesăm mai întâi adresa URL dată și captăm întregul HTML pe care îl convertim într-un obiect supă frumos. Odată ce este făcut, extragem anumite div-uri, scripturi, titluri și alte etichete cu atribute specifice. În acest fel, putem identifica informații specifice pe care este posibil să dorim să le extragem dintr-o pagină.
Puteți vedea că am extras și un link de imagine pentru fiecare proprietate. Acest lucru a fost făcut în mod deliberat, deoarece pentru ceva precum imobiliare, imaginile sunt la fel de valoroase ca și alte informații. Deși într-adevăr am extras mai multe câmpuri din paginile de listă imobiliară, trebuie remarcat că pagina HTML conține multe mai multe puncte de date. Prin urmare, salvăm și conținutul HTML la nivel local, astfel încât să îl puteți parcurge și să accesați cu crawlere mai multe informații.
Unele dintre înregistrările casei pe care le-am răzuit
După cum am menționat anterior, am accesat cu crawlere câteva liste de proprietăți pentru a vă arăta cum ar arăta datele răzuite de Python în format JSON. De asemenea, am menționat proprietatea pentru care este un anumit JSON, sub JSON. Acum să vorbim despre punctele de date pe care le-am răzuit.
Am primit o imagine a proprietății (deși multe imagini pentru fiecare proprietate sunt disponibile pe o pagină de listare, am primit câte una pentru fiecare - aceasta este imaginea de sus pentru fiecare listă). De asemenea, am primit prețul (în dolari) la care este listat, titlul proprietății și o descriere a acestuia care vă va ajuta să vă creați o imagine mentală a proprietății.
Odată cu aceasta, am răzuit adresa, împărțită în patru părți separate: strada, localitatea, regiunea și codul poștal. Avem un alt câmp de detalii care are mai multe subcâmpuri, cum ar fi numărul de camere, dimensiunea etajului și o descriere lungă. În anumite cazuri, descrierea lipsește, așa cum am aflat odată ce am răzuit mai multe pagini.
[limbajul codului=”python”]
{
„Details_Broad”: {
„Număr de camere”: 4,
„Dimensiunea podelei (în mp)”: „1.728”
},
"Abordare": {
„Strada”: „638 Grant Ave”,
„Localitate”: „North Baldwin”,
„Regiune”: „NY”,
„Cod poștal”: „11510”
},
„Titlu”: „638 Grant Ave, North Baldwin, NY 11510 | MLS #3137924 | Zillow”,
„Detail_Short”: „638 Grant Ave , North Baldwin, NY 11510-1332 este o casă unifamilială listată spre vânzare la 299.000 USD. Casa de 1.728 mp este o proprietate cu 4 paturi și 2 băi. Găsiți 31 de fotografii ale casei 638 Grant Ave din Zillow. Vedeți mai multe detalii despre proprietate, istoricul vânzărilor și datele Zestimate pe Zillow. MLS # 3137924”,
„Preț în USD”: 299000,
„Imagine”: „https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg”
}
[/cod]
[limbajul codului=”python”]
{
„Details_Broad”: {
„Descriere”: „Casa unifamilială cu trei dormitoare, situată în cartierul Brattle din Arlington, între Arlington Heights și Arlington Center. Construită în anii 1920, această casă oferă detalii frumoase de epocă, podele din lemn de esență tare, tavan cu grinzi, cameră de zi cu șemineu, o sufragerie privată, trei dormitoare mari, un birou și două băi complete. Potențialul de îmbunătățire a acestei proprietăți pentru a extinde spațiul de locuit și a personaliza după gustul dvs. personal este excepțional. Aproape de Minuteman Commuter Bikeway, liniile de autobuz Rt 77 și 79, școli, cumpărături și restaurante. Fotografii virtuale de punere în scenă și renovare virtuală oferite pentru a vă ajuta să vizualizați.”
„Număr de camere”: 4,
„Dimensiunea podelei (în mp)”: „2.224”
},
"Abordare": {
„Street”: „10 Walnut St”,
„Localitate”: „Arlington”,
„Regiune”: „MA”,
„Cod poștal”: „02476”
},
„Titlu”: „10 Walnut St, Arlington, MA 02476 | MLS #72515880 | Zillow”,
„Detail_Short”: „10 Walnut St , Arlington, MA 02476-6116 este o casă unifamilială listată spre vânzare la 725.000 USD. Casa de 2224 mp este o proprietate cu 4 paturi și 2 băi. Găsiți 34 de fotografii ale casei din 10 Walnut St din Zillow. Vedeți mai multe detalii despre proprietate, istoricul vânzărilor și datele Zestimate pe Zillow. MLS # 72515880”,
„Preț în USD”: 725000,
„Imagine”: „https://photos.zillowstatic.com/p_h/ISifzwig3xt2re1000000000.jpg”
}
[/cod]
[limbajul codului=”python”]
{
„Details_Broad”: {
„Număr de camere”: 4,
„Dimensiunea podelei (în mp)”: „1.728”
},
"Abordare": {
„Strada”: „638 Grant Ave”,
„Localitate”: „North Baldwin”,
„Regiune”: „NY”,
„Cod poștal”: „11510”
},
„Titlu”: „638 Grant Ave, North Baldwin, NY 11510 | MLS #3137924 | Zillow”,
„Detail_Short”: „638 Grant Ave , North Baldwin, NY 11510-1332 este o casă unifamilială listată spre vânzare la 299.000 USD. Casa de 1.728 mp este o proprietate cu 4 paturi și 2 băi. Găsiți 31 de fotografii ale casei 638 Grant Ave din Zillow. Vedeți mai multe detalii despre proprietate, istoricul vânzărilor și datele Zestimate pe Zillow. MLS # 3137924”,
„Preț în USD”: 299000,
„Imagine”: „https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg”
}
[/cod]
Razuirea datelor imobiliare la scară largă
Folosind un astfel de cod, puteți accesa cu crawlere detalii legate doar de câteva proprietăți imobiliare specifice. Puteți verifica manual proprietățile care vă interesează din când în când. Cu toate acestea, dacă doriți să vizați o anumită regiune în SUA sau la nivel internațional, ați avea nevoie de un furnizor de servicii expert de web scraping sau de instrumente de date scraping care să vă ajute să colectați înregistrări de proprietăți de pe mai multe site-uri web.
PromptCloud, în calitate de furnizor de top de web scraping, consideră că soluțiile de web scraping ar trebui să fie fără probleme și ar trebui să conțină doar doi pași – clientul oferă cerința și primește date curate.
De asemenea, rețineți că aici în blog am folosit atât crawler, cât și scraper. Nu vă încurcați, mai mult sau mai puțin, ambele sunt la fel, dar dacă doriți să aflați mai multe, puteți verifica blogul nostru despre accesarea cu crawlere a datelor web vs.
Disclaimer: Codul prezent în tutorialul nostru este doar în scop de învățare. Nu vom fi responsabili pentru modul în care este utilizat și nu vom fi răspunzători din partea noastră pentru orice efect negativ al codului sursă. Simpla prezență a acestui cod pe site-ul nostru nu implică faptul că promovăm răzuirea sau accesarea cu crawlere a site-urilor web menționate în articol. Singurul scop al acestui tutorial este de a prezenta tehnica de scriere a web scrapers pentru portaluri web de top. Cu toate acestea, nu suntem obligați să furnizăm niciun suport pentru cod; vă încurajăm să adăugați întrebările și feedback-ul dvs. în secțiunea de comentarii, astfel încât să putem verifica și răspunde la anumite intervale .
