Data-Scraping-Tools zum Scraping von Immobiliendaten mit Python
Veröffentlicht: 2019-08-12Die führenden Immobilienseiten der Welt sind eine Fundgrube wertvoller Daten. Die Datenbank jeder beliebten US-Immobilienseite kann Informationen zu mehr als 100 Millionen Häusern enthalten. Zu diesen Häusern gehören diejenigen, die zum Verkauf, zur Miete oder sogar zurzeit nicht auf dem Markt sind. Das Scraping von Immobiliendaten liefert auch Daten für Miet- und Immobilienschätzungen, die als „Zestimates“ bezeichnet werden. Es hilft Eigentümern und Kunden, besser zu planen, indem es versucht, die Preise von Immobilien in den kommenden Jahren abzuschätzen.
Wenn es um den Kauf oder die Miete von Immobilien geht, denken wir bekanntlich zuerst an den Preisvergleich. Diese Websites für Wohnen bieten einen Preisvergleich mit allen Angeboten in diesem Bereich sowie grundlegende Informationen wie Haustyp, Anzahl der Zimmer, Größe, eine kurze Beschreibung usw.
Warum Daten von Immobilienseiten crawlen?
Die großen Immobilienanbieter zielen auf eine ganze Region ab und bearbeiten Millionen von Immobilien. Aber falls Sie ein Immobilienmakler sind, anstatt zu versuchen, Daten manuell zu sammeln, können Sie besser Daten von einer großen Website mit Immobilienangeboten crawlen.
Sie können auch Modelle für maschinelles Lernen erstellen, um die Preise von Immobilien vorherzusagen und Ihre Vorhersagen mit Zillows Zestimates zu vergleichen und zu sehen, welche besser oder näher an den tatsächlichen Werten ist.
Wie kann man Immobiliendaten mit Python kratzen?
Falls Sie einen unserer vorherigen Artikel „How to crawl or scape“ gelesen haben, haben Sie möglicherweise bereits die erforderliche Einrichtung auf Ihren Computern bereit. Falls nicht, empfehle ich Ihnen, diesem Artikel zu folgen, um Data Scraping Python, seine Pakete und den Texteditor einzurichten, bevor Sie sich mit dem Code die Hände schmutzig machen können.
Wo ist der Kodex?
Ohne viel Aufhebens haben wir uns entschieden, Ihnen den Code zum Scrapen von Immobiliendaten mit Python zur Verfügung zu stellen, der Ihnen helfen wird, Informationen von einer Website mit Immobilienanzeigen zu extrahieren. Der Daten-Crawling-Code ist in Python geschrieben und anschließend werde ich Ihnen zeigen, wie Sie ihn ausführen und was Sie erhalten, wenn Sie ihn ausführen.
[code language="python"]
#!/usr/bin/python
# -*- Kodierung: utf-8 -*-
import urllib.request
import urllib.parse
import urllib.fehler
aus bs4 importieren BeautifulSoup
SSL importieren
json importieren
ast. importieren
Betriebssystem importieren
from urllib.request import Anfrage, urlopen
# Zum Ignorieren von SSL-Zertifikatsfehlern
ctx = ssl.create_default_context()
ctx.check_hostname = Falsch
ctx.verify_mode = ssl.CERT_NONE
# Eingabe vom Benutzer
url = input('Zillow House Listing URL eingeben- ')
# Die Website glauben machen, dass Sie mit einem Mozilla-Browser darauf zugreifen
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
Webseite = urlopen(req).read()
# Erstellen eines BeautifulSoup-Objekts der HTML-Seite zum einfachen Extrahieren von Daten.
Suppe = BeautifulSoup(Webseite, 'html.parser')
html = Suppe.prettify('utf-8')
property_json = {}
property_json['Details_Broad'] = {}
property_json['Adresse'] = {}
# Extrahieren Sie den Titel der Immobilienliste
für Titel in soup.findAll('title'):
property_json['Titel'] = title.text.strip()
Unterbrechung
für 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-truncated'}):
property_json['Details_Broad']['Beschreibung'] = div.text.strip()
for (i, script) in enumerate(soup.findAll('script',
attrs={'type': 'application/ld+json'})):
wenn ich == 0:
json_data = json.loads(script.text)
property_json['Details_Broad']['Anzahl der Zimmer'] = json_data['numberOfRooms']
property_json['Details_Broad']['Bodengröße (in Quadratfuß)'] = json_data['floorSize']['value']
property_json['Adresse']['Straße'] = json_data['Adresse']['StraßeAdresse']
property_json['Adresse']['Ort'] = json_data['Adresse']['AdresseOrt']
property_json['Adresse']['Region'] = json_data['Adresse']['AdresseRegion']
property_json['Adresse']['Postleitzahl'] = json_data['Adresse']['Postleitzahl']
wenn ich == 1:
json_data = json.loads(script.text)
property_json['Preis in $'] = json_data['offers']['price']
property_json['Bild'] = json_data['bild']
Unterbrechung
mit open('data.json', 'w') als outfile:
json.dump (property_json, outfile, Einrückung=4)
mit open('output_file.html', 'wb') als Datei:
file.write(html)
print ('———-Datenextraktion abgeschlossen. JSON-Datei prüfen.———-')
[/Code]
Um den oben angegebenen Code auszuführen, müssen Sie ihn in einer Datei mit der Erweiterung speichern, z. B. propertyScraper.py. Sobald dies erledigt ist, führen Sie vom Terminal aus den Befehl aus –
[code language="python"]
python-propertyScraper.py
[/Code]
Wenn Sie es ausführen, werden Sie aufgefordert, die URL einer Immobilienliste einzugeben. Dies ist die Webseite, die tatsächlich vom Programm nach Daten durchsucht wird. Wir haben zwei Links verwendet und die Daten von zwei Immobilien gekratzt. Hier sind die Links –
- 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/
Die JSON-Dateien, die beim Ausführen des Codes für die in einem späteren Unterthema angegebenen erhalten werden.
Code-Erklärung
Bevor Sie darauf eingehen, wie der Code ausgeführt wird und was er zurückgibt, ist es wichtig, den Code selbst zu verstehen. Wie üblich klicken wir zuerst auf die angegebene URL und erfassen den gesamten HTML-Code, den wir in ein schönes Suppenobjekt konvertieren. Sobald dies erledigt ist, extrahieren wir bestimmte Divs, Skripte, Titel und andere Tags mit bestimmten Attributen. Auf diese Weise können wir bestimmte Informationen lokalisieren, die wir möglicherweise aus einer Seite extrahieren möchten.

Sie können sehen, dass wir auch einen Bildlink für jede Eigenschaft extrahiert haben. Dies wurde bewusst so gemacht, denn für so etwas wie Immobilien sind Bilder genauso wertvoll wie andere Informationen. Obwohl wir tatsächlich mehrere Felder aus den Immobilienlistenseiten extrahiert haben, ist anzumerken, dass die HTML-Seite viel mehr Datenpunkte enthält. Daher speichern wir auch den HTML-Inhalt lokal, damit Sie ihn durchgehen und weitere Informationen crawlen können.
Einige der Hausanzeigen, die wir verschrottet haben
Wie wir bereits erwähnt haben, haben wir tatsächlich ein paar Eigenschaftslisten für Sie gecrawlt, um Ihnen zu zeigen, wie die von Python gekratzten Daten im JSON-Format aussehen würden. Außerdem haben wir die Eigenschaft, für die ein bestimmter JSON ist, unter JSON erwähnt. Lassen Sie uns nun über die Datenpunkte sprechen, die wir geschabt haben.
Wir haben ein Bild der Immobilie erhalten (obwohl viele Bilder für jede Immobilie auf einer Auflistungsseite verfügbar sind, haben wir für jede Auflistung eins erhalten – das ist das oberste Bild für jede Auflistung). Wir haben auch den Preis (in $), zu dem es aufgeführt ist, den Titel für die Immobilie und eine Beschreibung davon, die Ihnen helfen würde, sich ein mentales Bild der Immobilie zu machen.
Dazu kratzten wir die Adresse, aufgeteilt in vier separate Teile: die Straße, den Ort, die Region und die Postleitzahl. Wir haben ein weiteres Detailfeld mit mehreren Unterfeldern, wie z. B. die Anzahl der Zimmer, die Stockwerksgröße und eine lange Beschreibung. In bestimmten Fällen fehlt die Beschreibung, wie wir beim Kratzen mehrerer Seiten herausfanden.
[code language="python"]
{
„Details_Breit“: {
„Anzahl Zimmer“: 4,
„Fußbodengröße (in Quadratfuß)“: „1.728“
},
"Adresse": {
„Straße“: „638 Grant Ave“,
„Ortschaft“: „Nord Balduin“,
„Region“: „NY“,
„Postleitzahl“: „11510“
},
„Titel“: „638 Grant Ave, North Baldwin, NY 11510 | MLS #3137924 | Zilow“,
„Detail_Short“: „638 Grant Ave, North Baldwin, NY 11510-1332, ist ein Einfamilienhaus, das für 299.000 $ zum Verkauf angeboten wird. Das 1.728 Quadratfuß große Haus ist ein Anwesen mit 4 Schlafzimmern und 2,0 Bädern. Finden Sie 31 Fotos des Hauses 638 Grant Ave auf Zillow. Sehen Sie sich weitere Immobiliendetails, Verkaufshistorie und Zestimate-Daten auf Zillow an. MLS-Nummer 3137924“,
„Preis in $“: 299000,
„Bild“: „https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg“
}
[/Code]
[code language="python"]
{
„Details_Breit“: {
„Beschreibung“: „Einfamilienhaus mit drei Dachgauben in Arlingtons Stadtteil Brattle zwischen Arlington Heights und Arlington Center. Dieses in den 1920er Jahren erbaute Haus bietet schöne historische Details, Hartholzböden, Balkendecken, ein Wohnzimmer mit Kamin und privatem Wintergarten, ein formelles Esszimmer, drei große Schlafzimmer, ein Büro und zwei Badezimmer mit WC. Das Potenzial, diese Immobilie zu verbessern, um den Wohnraum zu erweitern und nach Ihrem persönlichen Geschmack zu personalisieren, ist außergewöhnlich. In der Nähe des Minuteman Commuter Bikeway, der Buslinien Rt 77 und 79, Schulen, Einkaufsmöglichkeiten und Restaurants. Virtuelle Inszenierung und virtuelle Renovierungsfotos werden bereitgestellt, um Ihnen bei der Visualisierung zu helfen.“,
„Anzahl Zimmer“: 4,
„Fußbodengröße (in Quadratfuß)“: „2.224“
},
"Adresse": {
„Straße“: „Walnussstraße 10“,
"Ort": "Arlington",
„Region“: „MA“,
„Postleitzahl“: „02476“
},
„Titel“: „10 Walnut St, Arlington, MA 02476 | MLS #72515880 | Zilow“,
„Detail_Short“: „10 Walnut St , Arlington, MA 02476-6116 ist ein Einfamilienhaus, das für 725.000 $ zum Verkauf angeboten wird. Das 2.224 Quadratfuß große Haus ist ein Anwesen mit 4 Schlafzimmern und 2,0 Bädern. Finden Sie 34 Fotos des Hauses 10 Walnut St auf Zillow. Sehen Sie sich weitere Immobiliendetails, Verkaufshistorie und Zestimate-Daten auf Zillow an. MLS-Nummer 72515880“,
„Preis in $“: 725000,
„Bild“: „https://photos.zillowstatic.com/p_h/ISifzwig3xt2re1000000000.jpg“
}
[/Code]
[code language="python"]
{
„Details_Breit“: {
„Anzahl Zimmer“: 4,
„Fußbodengröße (in Quadratfuß)“: „1.728“
},
"Adresse": {
„Straße“: „638 Grant Ave“,
„Ortschaft“: „Nord Balduin“,
„Region“: „NY“,
„Postleitzahl“: „11510“
},
„Titel“: „638 Grant Ave, North Baldwin, NY 11510 | MLS #3137924 | Zilow“,
„Detail_Short“: „638 Grant Ave, North Baldwin, NY 11510-1332, ist ein Einfamilienhaus, das für 299.000 $ zum Verkauf angeboten wird. Das 1.728 Quadratfuß große Haus ist ein Anwesen mit 4 Schlafzimmern und 2,0 Bädern. Finden Sie 31 Fotos des Hauses 638 Grant Ave auf Zillow. Sehen Sie sich weitere Immobiliendetails, Verkaufshistorie und Zestimate-Daten auf Zillow an. MLS-Nummer 3137924“,
„Preis in $“: 299000,
„Bild“: „https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg“
}
[/Code]
Scraping von Immobiliendaten im großen Stil
Mit Code wie diesem können Sie nur Details zu einigen wenigen bestimmten Immobilien crawlen. Sie können von Zeit zu Zeit manuell nach Immobilien suchen, an denen Sie interessiert sind. Wenn Sie jedoch auf eine bestimmte Region in den USA oder international abzielen möchten, benötigen Sie einen erfahrenen Web-Scraping-Dienstleister oder Daten-Scraping-Tools, die Ihnen helfen, Immobilieneinträge von einer Reihe von Websites zu sammeln.
PromptCloud ist als führender Web-Scraping-Anbieter der Ansicht, dass Web-Scraping-Lösungen problemlos sein und nur zwei Schritte enthalten sollten – der Kunde stellt die Anforderung und erhält saubere Daten.
Beachten Sie auch, dass wir hier im Blog sowohl Crawler als auch Scraper verwendet haben. Lassen Sie sich nicht verwirren, mehr oder weniger sind beide gleich, aber wenn Sie mehr wissen möchten, können Sie unseren Blog über das Crawlen von Webdaten im Vergleich zum Scraping von Webdaten lesen.
Haftungsausschluss: Der in unserem Tutorial enthaltene Code dient nur zu Lernzwecken. Wir sind nicht verantwortlich für die Art und Weise, wie er verwendet wird, und wir übernehmen keine Haftung für nachteilige Auswirkungen des Quellcodes. Das bloße Vorhandensein dieses Codes auf unserer Website bedeutet nicht, dass wir das Scraping oder Crawling der im Artikel erwähnten Websites fördern. Der einzige Zweck dieses Tutorials besteht darin, die Technik zum Schreiben von Web Scrapern für führende Webportale zu demonstrieren. Wir sind jedoch nicht verpflichtet, Support für den Code zu leisten; Wir empfehlen Ihnen, Ihre Fragen und Rückmeldungen im Kommentarbereich hinzuzufügen, damit wir sie in bestimmten Abständen überprüfen und beantworten können .
