Meteen naar de inhoud

Hoe u gegevens uit Zillow kunt schrapen: een stapsgewijze handleiding voor vastgoedprofessionals

Als een van de meest populaire vastgoedsites met meer dan 200 miljoen maandelijkse bezoeken biedt Zillow een schat aan gegevens voor professionals uit de sector. Door al die gegevens te verzamelen en te analyseren, kunt u krachtige marktinzichten ontdekken waarmee u uw bedrijf een boost kunt geven.

Maar waar begin je? Wees niet bang: in deze handleiding deel ik de exacte technieken die ik in meer dan 10 jaar heb ontwikkeld in de extractie van webgegevens om een ​​schaalbare Zillow-schraper helemaal opnieuw te bouwen.

Waarom Zillow-gegevens een goudmijn zijn

Laten we het eerst eens hebben Waarom slimme investeerders en agenten schrappen Zillow in de eerste plaats:

  • Ontdek kansen: Analyseer prijs- en vraaggegevens om opkomende of ondergewaardeerde gebieden te identificeren.
  • Verrijk uw database: Breid uw klantgegevens uit met vastgoedgegevens zoals bedden, baden en belastingwaarden.
  • Houd de concurrentie in de gaten: Houd nieuwe aanbiedingen in de gaten van andere makelaars die de markt betreden.
  • Bevestig de staat van de woning: Onderzoek onlangs verkochte huizen om de claims van de huidige eigenaren te verifiëren.
  • Ontdek markttrends: Ontdek de sterke stijging van de vraag naar eigendommen in de buurt van nieuwe commerciële ontwikkelingen.

Met meer dan 9 miljard bezoeken en meer dan 50 miljoen actieve maandelijkse gebruikers biedt Zillow ongeëvenaarde diepte en breedte aan vastgoedgegevens.

Uitdagingen om te overwinnen

Natuurlijk is het niet altijd eenvoudig om al die gegevens te benutten. Hier zijn enkele veelvoorkomende obstakels waarmee u te maken kunt krijgen:

  • Bot-detectie: Zillow blokkeert scrapers met captcha, IP-filters en andere verdedigingsmechanismen.
  • JavaScript-weergave: Belangrijke details worden dynamisch geladen via JS.
  • Frequente lay-outwijzigingen: Updates breken schrapers voortdurend.
  • Snelheidsbeperking: Agressieve blokkeringen op verzoeken per minuut.

Maar maak je geen zorgen: ik zal beproefde methoden delen om elk probleem aan te pakken. Met de juiste aanpak kunt u op betrouwbare wijze duizenden records per dag uit Zillow extraheren.

Stap 1: Zet een Python Web Scraping-omgeving op

Voor dit project gebruiken we Python – de ideale taal voor webscraping en data-analyse.

Installeer eerst Python 3.6 of hoger als je dit nog niet hebt. Ik raad aan een virtuele omgeving te creëren om de afhankelijkheden te isoleren:

python3 -m venv zillowscraping

Activeer de omgeving en installeer vervolgens de pakketten die we nodig hebben:

pip install requests beautifulsoup4 pandas matplotlib selenium webdriver-manager

Dit geeft ons tools voor het verzenden van verzoeken, het parseren van HTML, het analyseren van gegevens, het automatiseren van browsers en meer.

Nu kan het plezier echt beginnen!

Stap 2: Inspecteer doelpagina's

Vervolgens analyseren we handmatig de pagina's die we willen schrapen met behulp van browserontwikkelaarstools:

Hulpprogramma's voor browserontwikkelaars

Op een zoekresultatenpagina ziet de HTML er als volgt uit:

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

We zien duidelijke elementen voor prijs, adres, bedden, baden en vierkante meters. Leuk!

Laten we nu een individuele vermeldingspagina bekijken:

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

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

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

Hmm...details worden dynamisch geladen via JavaScript. Geen probleem – we kunnen Selenium gebruiken om de pagina’s weer te geven en de gewenste gegevens te extraheren.

Stap 3: Zoekresultatenpagina schrapen

Laten we, gewapend met onze verkenning, die zoekresultaten schrappen.

Eerst vragen we de pagina-HTML op:

import requests

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

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

Dan kunnen we parseren met Beautiful Soup:

from bs4 import BeautifulSoup

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

Extraheer nu de gegevens:

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,
    ...
  })

Om de paginering af te handelen, kunnen we controleren op een link 'Volgende' en het proces herhalen totdat er geen pagina's meer over zijn.

Stap 4: Schraap de detailpagina met Selenium

Voor individuele vermeldingspagina's gebruiken we Selenium om een ​​browser te automatiseren en JavaScript weer te geven.

Installeer de ChromeDriver:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

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

Nu kunnen we details extraheren:

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,
    ...
  }

Roep deze functie aan om elke pagina te schrapen terwijl we de URL's van zoekresultaten doorlopen.

Stap 5: Vermijd blokkades met proxy's en user-agents

Om de verdediging van Zillow te omzeilen, is het essentieel om verzoeken door te sturen proxies en regelmatig draaien gebruikersagenten:

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)

Dit helpt bij het distribueren van verzoeken over veel verschillende IP's en het nabootsen van echte gebruikers.

Ik raad aan om samen te werken met proxydiensten zoals BrightData, SmartProxy of Microleaves om toegang te krijgen tot miljoenen residentiële IP's, perfect om blokkades te omzeilen.

Stap 6: Implementeer beperking en nieuwe pogingen

Om te voorkomen dat we de tarieflimieten bereiken, moeten we verzoeken beperken door willekeurige vertragingen toe te voegen:

from time import sleep
from random import randint

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

En gebruik try/except-blokken om het opnieuw te proberen bij fouten:

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) 

Hierdoor ontstaat een veerkrachtige schraper die periodieke problemen kan oplossen.

Stap 7: Bewaar geschraapte gegevens

Eenmaal geschraapt, moeten we de gegevens opslaan. Voor kleinere projecten kunnen CSV-bestanden voldoende zijn:

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)  

Voor grotere datasets laadt u deze in een SQL-database of NoSQL-winkel zoals MongoDB. Dit maakt het mogelijk om interactieve dashboards en kaarten te bouwen om inzichten te ontdekken!

Laten we beginnen met schrapen!

Daar heb je het: een beproefd proces voor het schrapen van vastgoedgegevens uit Zillow. Nu kunt u profiteren van de vele vermeldingen om uw bedrijf naar een hoger niveau te tillen.

Als u begint met schrapen, neem dan gerust contact met ons op als u nog vragen heeft! Ik help collega-vastgoedprofessionals graag om data effectiever te gebruiken.

Laat het me weten zodra je elke dag duizenden nieuwe Zillow-vermeldingen begint te extraheren!

Doe mee aan het gesprek

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd *