Strumenti di scraping dei dati per lo scraping di dati immobiliari utilizzando Python

Pubblicato: 2019-08-12
Mostra il sommario
Perché eseguire la scansione dei dati dai siti immobiliari?
Come raschiare i dati immobiliari usando Python?
Dov'è il codice?
Spiegazione del codice
Alcuni degli elenchi di The House che abbiamo raschiato
Raschiare i dati immobiliari su larga scala

I principali siti immobiliari del mondo sono una miniera di dati preziosi. Il database di qualsiasi popolare sito immobiliare statunitense potrebbe contenere informazioni su più di 100 milioni di case. Queste case includono quelle in vendita, in affitto o anche quelle non attualmente sul mercato. La raschiatura dei dati immobiliari fornisce anche dati per l'affitto e le stime degli immobili chiamati "Zstimates". Aiuta i proprietari, così come i clienti, a pianificare meglio cercando di stimare i prezzi delle proprietà nei prossimi anni.

Quando si tratta di acquistare o affittare proprietà, sappiamo che la prima cosa che viene in mente è il confronto dei prezzi. Questi siti di alloggi forniscono il confronto dei prezzi con tutti gli annunci in quella zona, nonché informazioni di base come il tipo di casa, il numero di stanze, le dimensioni, una breve descrizione, ecc.

Perché eseguire la scansione dei dati dai siti immobiliari?

Le grandi società di elenchi di proprietà prendono di mira un'intera regione e lavorano su milioni di proprietà. Ma nel caso in cui tu sia un agente immobiliare, invece di provare a raccogliere dati manualmente da solo, puoi scansionare meglio i dati da un importante sito web di annunci immobiliari.

Puoi anche creare modelli di Machine Learning per prevedere i prezzi delle proprietà e confrontare le tue previsioni con Zestimates di Zillow e vedere quale è migliore o più vicino ai valori effettivi.

Come raschiare i dati immobiliari usando Python?

Nel caso in cui tu abbia seguito uno dei nostri precedenti articoli "Come eseguire la scansione o lo scape", potresti già avere la configurazione necessaria pronta sui tuoi computer. In caso contrario, ti consiglio di seguire questo articolo per impostare lo scraping dei dati python, i suoi pacchetti e l'editor di testo prima di poterti sporcare le mani con il codice.

Dov'è il codice?

Senza troppi indugi, abbiamo deciso di fornirti il ​​codice per lo scraping dei dati immobiliari utilizzando python che ti aiuterà a estrarre informazioni da un sito Web di elenchi di proprietà. Il codice di scansione dei dati è scritto in Python e, successivamente, ti mostrerò come eseguirlo e cosa otterrai una volta eseguito.

[lingua del codice =”python”]
#!/usr/bin/python
# -*- codifica: utf-8 -*-

import urllib.request
importa urllib.parse
import urllib.error
da bs4 importa BeautifulSoup
importazione ssl
importa json
importare ast
importare os
da urllib.request import Request, urlopen

# Per ignorare gli errori del certificato SSL

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

# Input dall'utente

url = input('Enter Zillow House Listing Url- ')

# Far credere al sito Web che stai accedendo utilizzando un browser mozilla

req = Richiesta(url, headers={'User-Agent': 'Mozilla/5.0'})
pagina web = urlopen(req).read()

# Creazione di un oggetto BeautifulSoup della pagina html per una facile estrazione dei dati.

zuppa = BeautifulSoup(pagina web, 'html.parser')
html = zuppa.pretify('utf-8')
proprietà_json = {}
property_json['Details_Broad'] = {}
property_json['Indirizzo'] = {}

# Estrarre il titolo dell'elenco di proprietà

per il titolo in soup.findAll('title'):
property_json['Titolo'] = title.text.strip()
rompere

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

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

for (i, script) in enumerate(soup.findAll('script',
attrs={'tipo': 'applicazione/ld+json'})):
se io == 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['Indirizzo']['Codice postale'] = json_data['indirizzo']['Codice postale']
se io == 1:
json_data = json.loads(script.text)
property_json['Prezzo in $'] = json_data['offerte']['prezzo']
property_json['Image'] = json_data['image']
rompere

con open('data.json', 'w') come file di uscita:
json.dump(property_json, outfile, indent=4)

con open('output_file.html', 'wb') come file:
file.scrivi(html)

print ('———-L'estrazione dei dati è completa. Controlla il file json.———-')
[/codice]

Per eseguire il codice sopra indicato, è necessario salvarlo in un file con estensione, ad esempio propertyScraper.py. Fatto ciò, dal terminale, esegui il comando –

[lingua del codice =”python”]
python propertyScraper.py
[/codice]

Quando lo esegui, ti verrà chiesto di inserire l'URL di un elenco di proprietà. Questa è la pagina Web che verrà effettivamente scansionata per i dati dal programma. Abbiamo utilizzato due collegamenti e raschiato i dati di due proprietà. Ecco i link –

  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/

I file JSON ottenuti eseguendo il codice sul dato in un argomento secondario successivo.

Spiegazione del codice

Prima di esaminare come viene eseguito il codice e cosa restituisce, è importante comprendere il codice stesso. Come al solito, per prima cosa colpiamo l'URL fornito e catturiamo l'intero HTML che convertiamo in un bellissimo oggetto zuppa. Una volta fatto, estraiamo div, script, titoli e altri tag specifici con attributi specifici. In questo modo siamo in grado di individuare informazioni specifiche che potremmo voler estrarre da una pagina.

Puoi vedere che abbiamo anche estratto un collegamento immagine per ogni proprietà. Questo è stato fatto deliberatamente poiché per qualcosa come il settore immobiliare, le immagini hanno lo stesso valore di altre informazioni. Sebbene abbiamo effettivamente estratto diversi campi dalle pagine degli elenchi di immobili, è da notare che la pagina HTML contiene molti più punti dati. Quindi stiamo anche salvando il contenuto HTML localmente in modo che tu possa esaminarlo ed eseguire la scansione di più informazioni.

Alcuni degli elenchi di The House che abbiamo raschiato

Come accennato in precedenza, abbiamo effettivamente eseguito la scansione di alcuni elenchi di proprietà per mostrarti come apparirebbero i dati raschiati da Python in formato JSON. Inoltre, abbiamo menzionato la proprietà per cui si trova un particolare JSON, sotto il JSON. Ora parliamo dei punti dati che abbiamo raschiato.

Abbiamo un'immagine della proprietà (sebbene molte immagini per ogni proprietà siano disponibili su una pagina dell'elenco, ne abbiamo una per ciascuna, che è l'immagine in alto per ogni annuncio). Abbiamo anche ottenuto il prezzo (in $) a cui è elencato, il titolo della proprietà e una descrizione che ti aiuterebbe a creare un'immagine mentale della proprietà.

Insieme a questo, abbiamo raschiato l'indirizzo, suddiviso in quattro parti separate: la via, la località, la regione e il codice postale. Abbiamo un altro campo dei dettagli che ha più sottocampi, come il numero di stanze, la dimensione del pavimento e una lunga descrizione. In alcuni casi, la descrizione manca come abbiamo scoperto dopo aver raschiato più pagine.

[lingua del codice =”python”]
{
"Dettagli_ampio": {
“Numero di Camere”: 4,
“Dimensioni del pavimento (in piedi quadrati)”: “1.728”
},
"Indirizzo": {
“Strada”: “638 Grant Ave”,
“Località”: “Nord Baldwin”,
“Regione”: “NY”,
“Codice postale”: “11510”
},
“Titolo”: “638 Grant Ave, North Baldwin, NY 11510 | MLS #3137924 | Zillow”,
"Detail_Short": "638 Grant Ave, North baldwin, NY 11510-1332 è una casa unifamiliare in vendita a $ 299.000. La casa di 1.728 piedi quadrati è una proprietà con 4 letti e 2 bagni. Trova 31 foto della casa 638 Grant Ave su Zillow. Visualizza più dettagli sulla proprietà, cronologia delle vendite e dati Zestimate su Zillow. MLS # 3137924”,
“Prezzo in $”: 299000,
“Immagine”: “https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg”
}
[/codice]

[lingua del codice =”python”]
{
"Dettagli_ampio": {
“Descrizione”: “Casa unifamiliare con tre abbaini situata nel quartiere Brattle di Arlington, tra Arlington Heights e Arlington Center. Costruita negli anni '20, questa casa offre splendidi dettagli d'epoca, pavimenti in legno duro, soffitti con travi a vista, soggiorno con caminetto con veranda privata, una sala da pranzo formale, tre ampie camere da letto, un ufficio e due bagni completi. Il potenziale di migliorare questa proprietà per espandere lo spazio abitativo e personalizzarlo secondo il proprio gusto personale è eccezionale. Vicino a Minuteman Commuter Bikeway, Rt 77 e 79 linee di autobus, scuole, negozi e ristoranti. Allestimenti virtuali e foto di ristrutturazione virtuali fornite per aiutarti a visualizzare.",
“Numero di Camere”: 4,
“Dimensioni del pavimento (in piedi quadrati)”: “2.224”
},
"Indirizzo": {
“Strada”: “10 Walnut St”,
“Località”: “Arlington”,
“Regione”: “MA”,
“Codice postale”: “02476”
},
“Titolo”: “10 Walnut St, Arlington, MA 02476 | MLS #72515880 | Zillow”,
"Detail_Short": "10 Walnut St, Arlington, MA 02476-6116 è una casa unifamiliare in vendita a $ 725.000. La casa di 2.224 piedi quadrati è una proprietà con 4 letti e 2 bagni. Trova 34 foto della casa di 10 Walnut St a Zillow. Visualizza più dettagli sulla proprietà, cronologia delle vendite e dati Zestimate su Zillow. MLS # 72515880”,
“Prezzo in $”: 725000,
“Immagine”: “https://photos.zillowstatic.com/p_h/ISifzwig3xt2re1000000000.jpg”
}
[/codice]

[lingua del codice =”python”]
{
"Dettagli_ampio": {
“Numero di Camere”: 4,
“Dimensioni del pavimento (in piedi quadrati)”: “1.728”
},
"Indirizzo": {
“Strada”: “638 Grant Ave”,
“Località”: “Nord Baldwin”,
“Regione”: “NY”,
“Codice postale”: “11510”
},
“Titolo”: “638 Grant Ave, North Baldwin, NY 11510 | MLS #3137924 | Zillow”,
"Detail_Short": "638 Grant Ave, North baldwin, NY 11510-1332 è una casa unifamiliare in vendita a $ 299.000. La casa di 1.728 piedi quadrati è una proprietà con 4 letti e 2 bagni. Trova 31 foto della casa 638 Grant Ave su Zillow. Visualizza più dettagli sulla proprietà, cronologia delle vendite e dati Zestimate su Zillow. MLS # 3137924”,
“Prezzo in $”: 299000,
“Immagine”: “https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg”
}
[/codice]

Raschiare i dati immobiliari su larga scala

Utilizzando un codice come questo puoi eseguire la scansione dei dettagli relativi solo ad alcune proprietà immobiliari specifiche. Di tanto in tanto potresti controllare manualmente le proprietà che ti interessano. Tuttavia, se stai cercando di rivolgerti a una regione specifica negli Stati Uniti o a livello internazionale, avresti bisogno di un fornitore di servizi di scraping web esperto o di strumenti di scraping di dati che ti aiutino a raccogliere elenchi di proprietà da numerosi siti web.

PromptCloud, in qualità di fornitore leader di web scraping, ritiene che le soluzioni di web scraping dovrebbero essere prive di problemi e dovrebbero contenere solo due passaggi: il cliente fornisce il requisito e riceve dati puliti.

Inoltre, nota qui nel blog che abbiamo utilizzato sia crawler che scraper. Non essere confuso più o meno entrambi sono uguali ma se vuoi saperne di più, puoi controllare il nostro blog sul crawling dei dati web vs lo scraping dei dati web.


Disclaimer: Il codice presente nel nostro tutorial è solo a scopo didattico. Non saremo responsabili per il modo in cui viene utilizzato e non ci sarà alcuna responsabilità da parte nostra per qualsiasi effetto negativo del codice sorgente. La semplice presenza di questo codice sul nostro sito non implica che promuoviamo lo scraping o il crawling dei siti web citati nell'articolo. L'unico scopo di questo tutorial è mostrare la tecnica di scrittura di web scraper per i principali portali web. Tuttavia, non siamo obbligati a fornire alcun supporto per il codice; ti invitiamo ad aggiungere le tue domande e feedback nella sezione commenti in modo che possiamo controllare e rispondere a determinati intervalli .