Zum Inhalt

So extrahieren Sie Daten aus Zillow: Eine Schritt-für-Schritt-Anleitung für Immobilienprofis

Als eine der beliebtesten Immobilienseiten mit über 200 Millionen monatlichen Besuchen bietet Zillow Branchenprofis einen Schatz an Daten. Durch das Auswerten und Analysieren all dieser Daten können Sie aussagekräftige Markteinblicke gewinnen, um Ihr Geschäft anzukurbeln.

Aber wo fängt man an? Keine Angst – in diesem Leitfaden werde ich die genauen Techniken vorstellen, die ich in mehr als 10 Jahren in der Webdatenextraktion verfeinert habe, um einen skalierbaren Zillow-Scraper von Grund auf zu erstellen.

Warum Zillow-Daten eine Goldgrube sind

Lassen Sie uns zunächst darüber sprechen warum Kluge Investoren und Agenten scheitern an erster Stelle an Zillow:

  • Chancen erkennen: Analysieren Sie Preis- und Nachfragedaten, um aufstrebende oder unterbewertete Bereiche zu identifizieren.
  • Bereichern Sie Ihre Datenbank: Erweitern Sie Ihre Kundendaten mit Objektdetails wie Betten, Bädern und Steuerwerten.
  • Beobachten Sie die Konkurrenz: Behalten Sie neue Angebote von anderen Maklern im Auge, die auf den Markt kommen.
  • Bestätigen Sie den Zustand der Immobilie: Recherchieren Sie kürzlich verkaufte Häuser, um die Ansprüche der aktuellen Eigentümer zu überprüfen.
  • Entdecken Sie Markttrends: Erkennen Sie einen Anstieg der Nachfrage nach Immobilien in der Nähe neuer Gewerbegebiete.

Mit über 9 Milliarden Besuchen und mehr als 50 Millionen aktiven monatlichen Nutzern bietet Zillow eine unübertroffene Tiefe und Breite an Immobiliendaten.

Herausforderungen zu überwinden

Natürlich ist es nicht immer einfach, auf all diese Daten zuzugreifen. Hier sind einige häufige Hindernisse, mit denen Sie möglicherweise konfrontiert werden:

  • Bot-Erkennung: Zillow blockiert Scraper mit Captcha, IP-Filtern und anderen Abwehrmaßnahmen.
  • JavaScript-Rendering: Wichtige Details werden dynamisch über JS geladen.
  • Häufige Layoutänderungen: Updates machen Scraper ständig kaputt.
  • Ratenbegrenzung: Aggressive Blockierungen bei Anfragen pro Minute.

Aber keine Sorge – ich werde bewährte Methoden zur Lösung jedes Problems vorstellen. Mit dem richtigen Ansatz können Sie täglich Tausende von Datensätzen zuverlässig aus Zillow extrahieren.

Schritt 1: Richten Sie eine Python-Web-Scraping-Umgebung ein

Für dieses Projekt verwenden wir Python – die ideale Sprache für Web Scraping und Datenanalyse.

Installieren Sie zunächst Python 3.6 oder höher, falls Sie es noch nicht haben. Ich empfehle die Erstellung einer virtuellen Umgebung, um die Abhängigkeiten zu isolieren:

python3 -m venv zillowscraping

Aktivieren Sie die Umgebung und installieren Sie dann die benötigten Pakete:

pip install requests beautifulsoup4 pandas matplotlib selenium webdriver-manager

Dadurch erhalten wir Tools zum Senden von Anfragen, zum Parsen von HTML, zum Analysieren von Daten, zum Automatisieren von Browsern und mehr.

Jetzt kann der Spaß erst richtig beginnen!

Schritt 2: Zielseiten prüfen

Als Nächstes analysieren wir die Seiten, die wir durchsuchen möchten, manuell mithilfe von Browser-Entwicklertools:

Browser-Entwicklertools

Auf einer Suchergebnisseite sieht der HTML-Code folgendermaßen aus:

<div class="property-card">
  <div class="details">
    <div class="price">$299,000</div> 
    <div class="address">
      <a href="/de/1234-maple-st">1234 Maple St</a>
    </div>
    <div class="specs">
      3 bd | 2 ba | 1,420 sqft
    </div>
  </div>
</div>

Wir können klare Elemente für Preis, Adresse, Betten, Bäder und Quadratmeterzahl sehen. Hübsch!

Schauen wir uns nun eine einzelne Eintragsseite an:

<script>window.dataLayer = [{"property":"1234 Maple St"}];</script>

<div id="price"></div>

<script src="getDetails.js"></script>

Hmm...Details werden dynamisch über JavaScript geladen. Kein Problem – wir können Selenium verwenden, um die Seiten zu rendern und die gewünschten Daten zu extrahieren.

Schritt 3: Suchergebnisseite durchsuchen

Lassen Sie uns mit unserer Erkundung die Suchergebnisse durchsuchen.

Zuerst fordern wir den HTML-Code der Seite an:

import requests

url = "https://zillow.com/my-search-results/"
headers = {"User-Agent": "Mozilla..."} 

response = requests.get(url, headers=headers)
html = response.text

Dann können wir mit Beautiful Soup analysieren:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "html.parser")

Extrahieren Sie nun die Daten:

cards = soup.find_all("div", class_="property-card")

for card in cards:
  price = card.find("div", class_="price").text
  address = card.find("a").text
  beds, baths, sqft = card.find("div", class_="specs").text.split("|")

  print({
    "price": price, 
    "address": address,
    ...
  })

Um die Paginierung zu handhaben, können wir nach einem „Weiter“-Link suchen und den Vorgang wiederholen, bis keine Seiten mehr übrig sind.

Schritt 4: Kratzen Sie die Detailseite mit Selen ab

Für einzelne Eintragsseiten verwenden wir Selenium um einen Browser zu automatisieren und das JavaScript zu rendern.

Installieren Sie den ChromeDriver:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install()) 

Jetzt können wir Details extrahieren:

def get_listing_data(url):

  driver.get(url)

  price = driver.find_element_by_id("price").text
  address = driver.find_element_by_id("address").text
  ...

  return {
    "price": price,
    "address": address,
    ...
  }

Rufen Sie diese Funktion auf, um jede Seite zu durchsuchen, während wir die Suchergebnis-URLs durchlaufen.

Schritt 5: Vermeiden Sie Blockaden mit Proxys und Benutzeragenten

Um Zillows Abwehrmaßnahmen zu umgehen, ist es wichtig, Anfragen durchzuleiten Proxies und regelmäßig rotieren Benutzeragenten:

from random import choice 

proxies = ["192.168.1.1:8080", "192.168.1.2:8080"...]
user_agents = ["UA1", "UA2"...]

proxy = choice(proxies)
headers = {"User-Agent": choice(user_agents)}

response = requests.get(url, proxies={"http": proxy, "https": proxy}, headers=headers)

Dies hilft dabei, Anfragen auf viele verschiedene IPs zu verteilen und echte Benutzer nachzuahmen.

Ich empfehle die Zusammenarbeit mit Proxy-Diensten wie BrightData, SmartProxy oder Microleaves, um Zugriff auf Millionen privater IPs zu erhalten, die sich perfekt zum Umgehen von Blockaden eignen.

Schritt 6: Drosselung und Wiederholungsversuche implementieren

Um das Erreichen von Ratengrenzen zu vermeiden, müssen wir Anfragen durch das Hinzufügen zufälliger Verzögerungen drosseln:

from time import sleep
from random import randint

# Make request
sleep(randint(1, 5)) # Random delay

Und verwenden Sie try/exclusive-Blöcke, um es bei Fehlern erneut zu versuchen:

from requests.exceptions import RequestException

try:
  response = requests.get(url)
except RequestException as e:
  # Retry with exponential backoff
  sleep(2**num_retries)  
  response = requests.get(url) 

Dadurch entsteht ein widerstandsfähiger Schaber, der zeitweise auftretende Probleme bewältigen kann.

Schritt 7: Gekratzte Daten speichern

Nach dem Scrapen müssen wir die Daten speichern. Für kleinere Projekte können CSV-Dateien ausreichend sein:

import csv

with open("zillow.csv", "w") as f:
  writer = csv.writer(f)
  writer.writerow(["Address", "Price", "Beds", "Baths" ...])
  for listing in listings:
    writer.writerow(listing)  

Laden Sie größere Datensätze in eine SQL-Datenbank oder einen NoSQL-Speicher wie MongoDB. Dies ermöglicht die Erstellung interaktiver Dashboards und Karten, um Erkenntnisse zu gewinnen!

Beginnen wir mit dem Schaben!

Da haben Sie es – einen kampferprobten Prozess zum Scrapen von Immobiliendaten aus Zillow. Jetzt können Sie die Fülle an Einträgen nutzen, um Ihr Unternehmen auf die nächste Stufe zu heben.

Wenn Sie mit dem Schaben beginnen, können Sie sich gerne an uns wenden, wenn Sie weitere Fragen haben! Ich freue mich immer, anderen Immobilienprofis dabei zu helfen, Daten effektiver zu nutzen.

Lassen Sie es mich wissen, sobald Sie damit beginnen, jeden Tag Tausende neuer Zillow-Einträge zu extrahieren!

Stichworte:

Mitreden

E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind MIT * gekennzeichnet. *