add another makelaar
This commit is contained in:
@@ -24,6 +24,7 @@ from .realworks import (
|
||||
fetch_wassenaar,
|
||||
fetch_roepman,
|
||||
fetch_post,
|
||||
fetch_vankleef,
|
||||
)
|
||||
from .sure import (
|
||||
fetch_schielandborsboom,
|
||||
@@ -60,4 +61,5 @@ SCRAPERS = {
|
||||
'borgdorff': fetch_borgdorff,
|
||||
'vanherk': fetch_vanherk,
|
||||
'vanoord': fetch_vanoord,
|
||||
'vankleef': fetch_vankleef,
|
||||
}
|
||||
|
||||
@@ -151,6 +151,72 @@ def fetch_morris() -> list[RawListing]:
|
||||
return fetch_realworks("https://www.morrismakelaardij.nl", "morris")
|
||||
|
||||
|
||||
def fetch_vankleef() -> list[RawListing]:
|
||||
"""Fetch Van Kleef makelaars — only Schiedam, as specified."""
|
||||
listings_path = f"/aanbod/woningaanbod/schiedam/koop"
|
||||
listings = []
|
||||
page = 1
|
||||
|
||||
while True:
|
||||
url = f"https://www.vankleefmakelaars.nl{listings_path}/pagina-{page}/"
|
||||
soup = fetch_soup(url)
|
||||
cards = soup.select("li.aanbodEntry")
|
||||
if not cards:
|
||||
break
|
||||
|
||||
for card in cards:
|
||||
try:
|
||||
a_tag = card.select_one("a.aanbodEntryLink")
|
||||
if not a_tag:
|
||||
continue
|
||||
listing_url = "https://www.vankleefmakelaars.nl" + a_tag["href"]
|
||||
|
||||
adres = _text(card, ".street-address")
|
||||
postcode = (_text(card, ".postal-code") or "").replace(" ", "") or None
|
||||
stad = _text(card, ".locality")
|
||||
prijs = parse_prijs(_text(card, ".koopprijs .kenmerkValue"))
|
||||
|
||||
if prijs and prijs > config.MAX_PRICE:
|
||||
continue
|
||||
|
||||
status_text = (_text(card, ".objectstatusbanner") or "").lower()
|
||||
status = _REALWORKS_STATUS_MAP.get(status_text, "beschikbaar")
|
||||
|
||||
img_tag = card.select_one(".hoofdfoto img")
|
||||
hero = img_tag["src"] if img_tag else None
|
||||
|
||||
kk = _realworks_detail(listing_url, "vankleef")
|
||||
|
||||
listings.append(RawListing(
|
||||
url=listing_url,
|
||||
source_makelaar="vankleef",
|
||||
adres=adres,
|
||||
postcode=postcode,
|
||||
stad=stad,
|
||||
prijs=prijs,
|
||||
status=status,
|
||||
hero_image_url=hero,
|
||||
woningtype=kk.get("woningtype"),
|
||||
bouwjaar=int(kk["bouwjaar"]) if kk.get("bouwjaar") else None,
|
||||
woonoppervlak=parse_m2(kk.get("woonoppervlak")),
|
||||
perceeloppervlak=parse_m2(kk.get("perceeloppervlak")),
|
||||
kamers=int(kk["kamers"]) if kk.get("kamers") else None,
|
||||
slaapkamers=int(kk["slaapkamers"]) if kk.get("slaapkamers") else None,
|
||||
energielabel=kk.get("energielabel"),
|
||||
))
|
||||
if config.APP_ENV == "dev":
|
||||
break
|
||||
except Exception as e:
|
||||
log.warning("vankleef: parse fout: %s", e)
|
||||
|
||||
if len(cards) < 10:
|
||||
break
|
||||
page += 1
|
||||
|
||||
log.info("vankleef: %d listings opgehaald", len(listings))
|
||||
return listings
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Makelaardij Wassenaar (Schiedam) — Realworks CMS, JSON-LD listing page
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user