Zurück zum Blog
Anleitungen
Raluca PenciucLast updated on May 8, 202612 min read

Wie man Realtor.com scrappt: Ein praktischer Leitfaden für 2026

Wie man Realtor.com scrappt: Ein praktischer Leitfaden für 2026
Kurzfassung: Wenn du herausfinden möchtest, wie man Realtor.com sauber scrapt, sind drei Dinge am wichtigsten: stabile Selektoren, die auch bei gehashten Klassennamen funktionieren, eine Request-Schicht, die Realtors Anti-Bot-Stack umgeht, und Code, der sowohl Listenseiten als auch Detailseiten abarbeitet. Dieser Leitfaden enthält die vollständige Python-Implementierung mit Anti-Block-Taktiken und LLM-fähigen Exporten.

Wenn du Immobiliendaten in großem Umfang benötigst, ist das Erlernen des Scrapings von Realtor.com eine der nützlichsten Fähigkeiten, die du dir aneignen kannst. Realtor.com ist ein großer US-amerikanischer Immobilienmarktplatz, der zum Verkauf stehende Häuser, Mietobjekte und aktuelle Informationen zum Wohnungsmarkt auflistet, und der Großteil dieser Daten wird in HTML gerendert, das du mit Python parsen kannst.

Der Haken ist, dass Realtor.com ein hochkarätiges Ziel mit einem robusten Anti-Bot-Stack ist. Naive requests.get() Aufrufe geben CAPTCHA-HTML zurück, gehashtete Klassennamen wechseln ohne Vorwarnung, und die aussagekräftigsten Felder verbergen sich in eingebetteten JSON-Blobs. Mit der falschen Toolchain kann eine Woche vergehen, bevor auch nur eine einzige saubere Zeile produziert wird.

Dieser Leitfaden führt Sie durch den gesamten Python-Build von Anfang bis Ende: welche Felder Sie tatsächlich abrufen können, welche Selektoren das React-Rendering von Realtor.com überstehen, wie Sie Anfragen über eine Scraping-API leiten, die Proxys und CAPTCHAs für Sie abwickelt, und wie Sie Daten von Detailseiten wie Maklerkontakte, Ausstattungsmerkmale sowie Längen- und Breitengrade extrahieren. Wir behandeln Throttling, Fehlerbehandlung, rechtliche Grenzen und wie man Listings in ein LLM für die nachgelagerte Analyse einspeist.

Am Ende verfügen Sie über einen funktionierenden Scraper und nicht über einen kopierten Code-Schnipsel, der beim nächsten Frontend-Update nicht mehr funktioniert.

Warum Realtor.com scrapen und wofür nutzen Teams die Daten?

Das Wissen, wie man Realtor.com scrapt, eröffnet eine lange Liste praktischer Anwendungsfälle. Investmentteams ziehen Angebote für Vergleichsanalysen und das Training von AVMs heran. Maklerfirmen verfolgen die Lead-Generierung und entdecken abgelaufene oder erneut inserierte Objekte vor der Konkurrenz. Marktforscher verfolgen Bestands- und Preistrends nach Postleitzahl. Proptech-Ingenieure speisen Angebote zur Anreicherung in LLM-Pipelines ein. Der rote Faden: Die Angebote auf Realtor.com werden ständig aktualisiert, sodass eine manuelle Erfassung schon bei einer Handvoll Immobilien an ihre Grenzen stößt und strukturiertes Scraping der einzig vernünftige Weg ist, um Schritt zu halten.

Realtor.com-Datenfelder, die Sie realistisch extrahieren können

Die meisten Tutorials beschränken sich auf sechs Felder. Sie können jedoch viel mehr extrahieren, indem Sie sowohl die Suchergebnisse als auch die Detailseiten durchgehen. Auf einer Suchergebniskarte sind die zuverlässigen Felder der Angebotspreis, die vollständige Adresse, Schlafzimmer, Badezimmer, Wohnfläche, Grundstücksgröße, Angebotsstatus und die kanonische URL der Detailseite.

Wenn Sie jeder Detail-URL folgen, können Sie Folgendes extrahieren:

  • Objektdaten: Baujahr, Objekttyp, HOA-Gebühren, Parkmöglichkeiten, Grundstücksmaße
  • Ausstattung: Heizung, Kühlung, Bodenbelag, Haushaltsgeräte, Außenausstattung
  • Geodaten: Breiten- und Längengrad (praktisch für Kartierungen und Verknüpfungen auf Postleitzahlenebene)
  • Medien: Bild-URLs aus der Fotogalerie des Angebots
  • Makler: Name des Maklers, Telefonnummer und vermittelndes Büro
  • Metadaten des Angebots: MLS-ID, Vermarktungsdauer, Preisentwicklung

Das ist der Datensatz, der Vergleichsobjekte, Lead-Listen und AVMs antreibt – nicht nur ein einfacher Auszug von Preisen und Adressen.

Die Anti-Bot-Landschaft von Realtor.com: Was dich tatsächlich erwartet

Bevor Sie Scraper-Code schreiben, sollten Sie verstehen, womit Sie es zu tun haben. Realtor.com betreibt einen verhaltensbasierten Anti-Bot-Stack, der weit über IP-Blockierung hinausgeht. Reverse-Engineering-Berichte führen den Schutz auf einen Fingerprinting-Stack der Kasada-Klasse zurück; unabhängig davon, ob Kasada heute noch der Anbieter ist, sind die Erkennungssignale im Bereich des Bot-Schutzes gut dokumentiert.

Drei Ebenen sind entscheidend, wenn man lernen will, wie man Realtor.com in nennenswertem Umfang scrapt:

  1. TLS- und JS-Fingerprinting. Einfaches Python requests liefert einen TLS-Handshake und eine Header-Reihenfolge, die nicht mit echten Browsern übereinstimmen, was der Edge von Realtor.com bereits beim ersten Zugriff erkennen kann.
  2. Verhaltenskorrelation. Maus-Entropie-Proxys, Scroll-Muster und DOM-Interaktionssignale werden anhand menschlicher Verteilungen bewertet. Ein Scraper, der Seiten von einer einzigen IP-Adresse aus abfragt, sieht keineswegs wie ein Mensch aus.
  3. CAPTCHA-Seiten. Wenn Ihre Punktzahl den Schwellenwert überschreitet, wird der Hauptteil zu einer Challenge-Seite statt zu Listings, oft mit einem 200-Statuscode, sodass ein naiver Scraper gar nicht merkt, dass er gescheitert ist.

Planen Sie alle drei Maßnahmen vom ersten Tag an ein, anstatt sie erst nach dem ersten Stapel leerer Zeilen nachzurüsten.

Die Wahl des richtigen Scraping-Ansatzes für Ihr Projekt

Es gibt keine einzige richtige Antwort darauf, wie man Realtor.com scrapt, aber drei Ansätze sind wissenswert, und jeder passt zu einem anderen Anwendungsfall.

Ansatz

Am besten geeignet für

Vor- und Nachteile

requests + eine Scraping-API

Backend-Pipelines, Produktionsdaten-Jobs

Am schnellsten und kostengünstigsten, wenn Ihre API JS-Rendering und Proxys unterstützt

Selenium mit undetected-chromedriver

Seiten, die echte Browser-Interaktion oder Anmeldeabläufe erfordern

Höhere Kosten pro Seite, schwieriger zu skalieren, stößt mit der Zeit immer noch auf CAPTCHAs

Visuelle No-Code-Scraper

Analysten, die ad hoc einige hundert Einträge abrufen

Anfällig bei Änderungen von Klassennamen; nicht ideal für geplante Pipelines

Kurze Empfehlung: Wenn Sie ein Python-Team sind, das einen wiederkehrenden Datenfeed erstellt, nutzen Sie requests sowie eine Scraping-API und parsen Sie den HTML-Code mit BeautifulSoup – genau so, wie es in diesem Leitfaden beschrieben wird. Greifen Sie nur dann auf einen Headless-Browser zurück, wenn Sie wirklich mit einer angemeldeten oder stark JS-gesteuerten Ansicht interagieren müssen, und betrachten Sie visuelle No-Code-Scraper eher als einmalige Hilfsmittel denn als Produktionsinfrastruktur.

Voraussetzungen und Projekteinrichtung

Bevor wir uns damit befassen, wie man Realtor.com von Anfang bis Ende scrapt, richten Sie eine saubere Umgebung ein. Sie benötigen Python 3.9 oder neuer, eine neue virtualenv-Umgebung und vier Pakete:

python -m venv .venv && source .venv/bin/activate
pip install requests beautifulsoup4 lxml pandas

Außerdem benötigen Sie einen Scraping-API-Schlüssel. In diesem Leitfaden verwenden wir WebScrapingAPI als Request-Layer; melden Sie sich an, kopieren Sie Ihren Schlüssel aus dem Dashboard und speichern Sie ihn als Umgebungsvariable, damit er niemals in Git landet:

export WSA_KEY="your_key_here"

Das ist die gesamte Einrichtung. Keine Browser-Treiber, keine Proxy-Listen, um die man sich kümmern muss.

So scrapen Sie Realtor.com mit Python, Schritt für Schritt

Nun erstellen wir den eigentlichen Scraper in fünf gezielten Schritten: das DOM untersuchen und stabile Selektoren festlegen, Suchseiten über die Scraping-API abrufen, Listing-Karten mit BeautifulSoup parsen, paginierte Ergebnisse durchlaufen und in JSON, CSV oder einen pandas DataFrame exportieren. Die folgenden Code-Blöcke setzen die Einrichtung aus dem vorherigen Abschnitt voraus.

Inserate untersuchen und CSS-Selektoren zuordnen

Öffnen Sie die Suchergebnisse von Realtor.com in Chrome, klicken Sie mit der rechten Maustaste auf eine Listing-Karte und wählen Sie „Inspect“. Jede Karte ist in ein <li> mit data-testid="result-card". Preis, Adresse und Metafelder befinden sich innerhalb von <div>s und <li>, die ihre eigenen data-label Attribute (pc-price, pc-address, pc-meta-bedsusw.).

Realtor.com ordnet jede Karte zudem einer Hash-Klasse wie BasePropertyCard_propertyCardWrap__abc123. Wählen Sie nicht anhand des Hashs aus. Diese Suffixe werden bei jedem Frontend-Build neu generiert und führen ohne Vorwarnung zu Fehlern in Ihrem Scraper. Verankern Sie sich an data-testid und data-label , wo immer möglich. Sie sind ausdrücklich für die eigenen Tests des Frontends vorgesehen, was sie zu den stabilsten Ankerpunkten macht, die dir zur Verfügung stehen.

Rufen Sie Suchseiten über die WebScrapingAPI ab

Nachdem die Selektoren zugeordnet sind, leiten Sie die eigentliche Anfrage über die Scraping-API weiter. Die API kümmert sich um die Rotation von Residential-Proxys, das Rendern von JS und die CAPTCHA-Verarbeitung, sodass sich Ihr Code ganz auf das Parsen konzentrieren kann.

import os, requests

WSA_KEY = os.environ["WSA_KEY"]
SEARCH_URL = "https://www.realtor.com/realestateandhomes-search/Cincinnati_OH"

def fetch(url: str) -> str:
    r = requests.get(
        "https://api.webscrapingapi.com/v2",
        params={
            "api_key": WSA_KEY,
            "url": url,
            "render_js": "1",
            "country": "us",
        },
        timeout=60,
    )
    r.raise_for_status()
    return r.text

html = fetch(SEARCH_URL)

Warum speziell über eine API auf Realtor.com leiten? Ein einfacher requests.get stößt bereits nach wenigen Aufrufen auf eine CAPTCHA-Seite, da der TLS-Fingerabdruck und die Header-Reihenfolge nicht mit denen eines echten Browsers übereinstimmen. Die API normalisiert beides für dich und wechselt die private IP-Adresse bei jeder Anfrage.

Parsen Sie Listing-Karten mit BeautifulSoup

Sobald der HTML-Code vorliegt, wandelt BeautifulSoup ihn in eine abfragbare Form um. Seien Sie vorsichtig: Nicht jede Karte enthält alle Felder, also sichern Sie jede Abfrage ab, damit eine einzige fehlende Grundstücksgröße nicht die gesamte Zeile unbrauchbar macht.

from bs4 import BeautifulSoup

def parse_cards(html: str) -> list[dict]:
    soup = BeautifulSoup(html, "lxml")
    cards = soup.select('li[data-testid="result-card"]')
    listings = []
    for card in cards:
        def text(sel):
            el = card.select_one(sel)
            return el.get_text(strip=True) if el else None
        link = card.select_one("a[data-testid='card-link']")
        listings.append({
            "price":    text('[data-label="pc-price"]'),
            "address":  text('[data-label="pc-address"]'),
            "beds":     text('[data-label="pc-meta-beds"] span'),
            "baths":    text('[data-label="pc-meta-baths"] span'),
            "sqft":     text('[data-label="pc-meta-sqft"] span'),
            "lot_size": text('[data-label="pc-meta-sqftlot"] span'),
            "url": link["href"] if link and link.has_attr("href") else None,
        })
    return listings

Wir werden das url Feld verwenden, um jedem Eintrag auf seine Detailseite zu folgen. Wenn du BeautifulSoup lieber intensiver nutzen möchtest, ist unser Python-BeautifulSoup-Parsing-Leitfaden eine gute Lektüre.

Durch paginierte Ergebnisse schleifen

Realtor.com paginiert mit einem /pg-N URL-Muster, und jede Ergebnisseite gibt etwa 42 Karten zurück (die genaue Anzahl schwankt, also behandle sie nicht als Stoppbedingung). Die robusteste Strategie kombiniert einen Seitenzähler mit einer Überprüfung auf leere Ergebnisse:

def scrape_search(base_url: str, max_pages: int = 10) -> list[dict]:
    all_listings = []
    for page in range(1, max_pages + 1):
        page_url = base_url if page == 1 else f"{base_url}/pg-{page}"
        cards = parse_cards(fetch(page_url))
        if not cards:
            break
        all_listings.extend(cards)
    return all_listings

Es ist weitaus sicherer, anzuhalten, wenn eine Seite null Karten zurückgibt, als sich auf eine feste Anzahl pro Seite zu verlassen.

Exportieren Sie die Ergebnisse in JSON, CSV oder einen DataFrame

Sobald du die Angebote gesammelt hast, leite sie durch pandas, um Duplikate zu entfernen und sie in jedem gewünschten Format zu exportieren. Die URL der Detailseite ist der stabilste Schlüssel pro Angebot.

import pandas as pd

df = pd.DataFrame(scrape_search(SEARCH_URL))
df = df.drop_duplicates(subset="url").reset_index(drop=True)

df.to_json("realtor_listings.json", orient="records", indent=2)
df.to_csv("realtor_listings.csv", index=False)

CSV ist der einfachste Weg zu Excel und BI-Tools. JSON eignet sich besser, wenn nachgelagerter Code verschachtelte Objekte erwartet, insbesondere nachdem wir Felder der Detailseite hinzugefügt haben. In jedem Fall sollten Sie vor dem Export Duplikate entfernen, da Realtor.com manchmal dasselbe Inserat auf benachbarten Suchseiten anzeigt.

Einzelne Immobilien-Detailseiten scrapen

Detailseiten enthalten den umfangreicheren Datensatz: Baujahr, Ausstattung, Kontaktdaten des Maklers, Längen- und Breitengrad, Fotos. Realtor.com bettet zwei strukturierte Payloads ein:

  1. Ein <script type="application/ld+json"> Block, der dem schema.org RealEstateListing-Vokabular folgt.
  2. Ein <script id="__NEXT_DATA__"> Payload (der Next.js-Hydration-Blob) mit dem vollständigen Objektdatensatz.

Beide sind im JSON-Format:

import json
from bs4 import BeautifulSoup

def parse_detail(html: str) -> dict:
    soup = BeautifulSoup(html, "lxml")
    raw  = soup.find("script", id="__NEXT_DATA__").string
    prop = json.loads(raw)["props"]["pageProps"]["initialReduxState"]["propertyDetails"]
    coord = (prop.get("location", {}).get("address", {}).get("coordinate") or {})
    adv   = (prop.get("advertisers") or [{}])[0]
    return {
        "year_built": prop.get("description", {}).get("year_built"),
        "lat": coord.get("lat"), "lon": coord.get("lon"),
        "amenities": prop.get("description", {}).get("features", []),
        "agent_name":  adv.get("name"),
        "agent_phone": (adv.get("phones") or [{}])[0].get("number"),
        "brokered_by": adv.get("office", {}).get("name"),
        "photos": [p["href"] for p in (prop.get("photos") or [])],
    }

Dieser Schlüsselpfad ändert sich; protokolliere die Roh-Nutzlast während der Entwicklung und fixiere sie neu, wenn du eine KeyError. JSON-LD ist stabiler, stellt jedoch weniger Felder bereit.

Verwandeln Sie Immobilienanzeigen in LLM-fähige Daten

Sobald Sie sauberes Listing-JSON haben, ist ein LLM der schnellste Weg, es anzureichern. Überspringen Sie das „Diese Seite zusammenfassen“-Muster; unterteilen Sie nach Listing und verwenden Sie strukturierte Prompts.

Zwei Pipelines, die sich auszahlen:

  • Vergleichsanalyse. Füttern Sie fünf bis zehn Angebote aus derselben Postleitzahl in eine Eingabeaufforderung mit einem JSON-Schema, das nach dem angepassten Preis pro Quadratmeter, Übereinstimmungen beim Wohnungstyp und Ausreißer-Kennzeichnungen fragt. Sie erhalten einen Vergleichsbericht in einem Durchgang.
  • Lead-Anreicherung. Übergeben Sie den Namen des Maklers, die Maklerfirma und die URL des Inserats an ein Modell, das eine normalisierte Kontaktkarte mit einem Konfidenzwert zurückgibt.

Das Abrufen von Seiten als Markdown statt als HTML über Ihre Scraping-API reduziert die Token-Kosten um etwa die Hälfte.

Blockierungen vermeiden: Proxys, Header und Drosselung

Wenn Sie Realtor.com von einer Rechenzentrums-IP mit Standard-Headers scrapen, werden Sie blockiert. Über das hinaus, was eine Scraping-API für Sie erledigt, sind folgende Maßnahmen entscheidend:

  • Residential-Proxys. Rechenzentrums-IPs werden massenhaft markiert; durch die Rotation von Residential-Proxys sieht der Traffic wie echte Besucher aus.
  • Header-Rotation. Randomisieren User-Agent, Accept-Languageund Sec-Ch-Ua pro Anfrage, und halte sie konsistent (ein iPhone-UA mit einem Windows-Plattform-Header ist ein sofortiger Hinweis).
  • Drosselung. Etwa drei bis sechs Sekunden Jitter zwischen den Anfragen halten Sie unter den meisten Verhaltens-Baselines.
  • Exponentielles Backoff. Bei 403 oder 429: 2 ** attempt + random.random() und wechsle die Sitzung; versuche es niemals erneut über dieselbe Verbindung.

All das selbst zu entwickeln, ist ein Projekt; die meisten Teams lagern dies aus.

Rechtliche und ethische Überlegungen

Die Angebotsseiten von Realtor.com sind öffentlich, daher ist das Sammeln von Preis-, Adress- und Strukturdaten für interne Recherchen im Allgemeinen vertretbar, aber es ist kein Freifahrtschein. Lies die Nutzungsbedingungen von Realtor.com und die robots.txt, bevor du eine wiederkehrende Pipeline aufbaust. Behandle Maklernamen, Telefonnummern und E-Mail-Adressen als personenbezogene Daten gemäß dem kalifornischen CCPA und ähnlichen Vorschriften; das Sammeln dieser Daten zum Weiterverkauf oder für unaufgeforderte Kontaktaufnahmen bringt dich in einen regulierten Bereich.

Behebung häufiger Fehler bei Realtor-Scrapern

Fünf Fehlerquellen sind für die meisten Probleme beim Scraping von Realtor-Daten verantwortlich:

  • Leere Liste mit Angeboten. Sie sehen eine CAPTCHA-Seite, die den Status 200 zurückgegeben hat; überprüfen Sie den Seitentitel und aktivieren Sie dann das JS-Rendering in der API.
  • Abweichung der Hash-Klasse. Ersetzen Sie alle BasePropertyCard_propertyCardWrap__* Selektor durch einen data-testid oder data-label lookup.
  • 403-/429-Spitzen. Verlängern Sie die Backoff-Zeit, rotieren Sie die Session und erhöhen Sie die Parallelität erst, wenn sich Ihre Fehlerrate stabilisiert hat.
  • Fehlende Detailfelder. Der __NEXT_DATA__ Schlüsselpfad hat sich verschoben; protokollieren Sie die Rohdaten und verweisen Sie die Schlüssel neu zu.
  • Doppelte Zeilen. Führen Sie vor dem Export immer eine Deduplizierung anhand der Listing-URL durch.

Wichtige Erkenntnisse

  • Zuerst Selektoren, dann Anfragen. An data-testid und data-label , niemals an gehashten Klassennamen wie BasePropertyCard_propertyCardWrap__*, die bei jedem Frontend-Build neu generiert werden.
  • Leiten Sie den Datenfluss in der Produktion über eine Scraping-API. Einfaches requests trifft CAPTCHA-Seiten auf Realtor.com innerhalb weniger Aufrufe; eine API-Schicht übernimmt Proxys, JS-Rendering und TLS-Fingerprinting in einem Schritt.
  • Detailseiten verzehnfachen Ihren Datensatz. Baujahr, Ausstattung, Maklerkontakte sowie Längen- und Breitengrad befinden sich im __NEXT_DATA__ Blob und JSON-LD auf jeder Immobilienseite, nicht in der Suchergebniskarte.
  • Drosseln und Backoff, selbst bei einer guten API. Etwa drei bis sechs Sekunden Jitter, Residential Rotation und exponentieller Backoff bei 403/429 halten lang laufende Pipelines stabil.
  • Halten Sie sich an die rechtlichen Rahmenbedingungen. Angebotsdaten sind öffentlich; Maklerkontakte sind personenbezogene Daten. Lesen Sie die Bedingungen, bevor Sie skalieren, und vermeiden Sie den Weiterverkauf regulierter Felder.

FAQ

Bietet Realtor.com eine offizielle API an, die ich anstelle von Scraping nutzen kann?

Es gibt keine allgemeine öffentliche API zum Durchsuchen von Angeboten. Die Muttergesellschaft von Realtor.com hat in der Vergangenheit RETS- und RESO-Web-API-Zugriff über MLS-Datenfeeds angeboten, doch diese sind durch Makler- oder Partnervereinbarungen beschränkt und nicht für offene Entwickleranmeldungen zugänglich. Für die meisten unabhängigen Entwickler und Analysten bleibt das strukturierte Scraping öffentlicher Angebotsseiten der einzige praktikable Weg zu Massendaten.

Blockiert Realtor.com Anfragen, die von AWS, GCP oder anderen Rechenzentrums-IPs stammen?

Ja, fast sofort. Der Anti-Bot-Stack von Realtor.com führt Listen der wichtigsten Cloud-ASNs und begrenzt deren Zugriffsrate oder blockiert sie aggressiv. Ein Scraper, der auf einer Standard-EC2- oder Cloud-Run-Instanz läuft, wird bereits nach wenigen Aufrufen CAPTCHA-Seiten sehen. Sie benötigen entweder Residential- oder Mobile-Proxys oder eine Scraping-API, die die IP-Rotation transparent handhabt.

Inwiefern unterscheidet sich das Scraping von Realtor.com vom Scraping von Zillow oder Redfin?

Alle drei sind React-gerendert, paginiert und durch verhaltensbasierte Anti-Bot-Stacks geschützt, aber die Implementierungsdetails unterscheiden sich. Zillow stützt sich stark auf seine __NEXT_DATA__ Nutzdaten und geht bei der Überprüfung mobiler Fingerabdrücke aggressiv vor. Redfin stellt eine umfangreichere interne JSON-API bereit, die vom Frontend genutzt wird. Realtor.com liegt dazwischen: stabile data-testid Hooks auf Karten sowie ein __NEXT_DATA__ Blob auf Detailseiten.

Wie stelle ich sicher, dass der Scraper weiterhin funktioniert, wenn Realtor.com seine gehashten Klassennamen ändert?

Verlasse dich gar nicht erst auf gehashtete Klassen. Verankere jeden Selektor an data-testid und data-label Attribute, die Teil des Frontend-eigenen Testvertrags sind und sich selten ändern. Füge einen Smoke-Test hinzu, der jeden Morgen ein bekanntes Inserat abruft und einen nicht leeren Preis überprüft; gib dann eine Warnung aus, wenn der Test fehlschlägt, damit du die Selektoren neu festlegen kannst, bevor die Pipeline unbemerkt leerläuft.

Was ist eine sichere Anfragerate für einen lang laufenden Realtor.com-Scraper?

Ein sinnvoller Ausgangswert ist eine verzögerte Wartezeit von etwa drei bis sechs Sekunden zwischen den Anfragen pro Sitzung, mit ein bis drei gleichzeitigen Sitzungen, jeweils über eine andere private IP-Adresse. Beobachten Sie Ihre 403/429-Rate; wenn sie über eine Stunde hinweg über ein oder zwei Prozent steigt, verlangsamen Sie den Zugriff weiter oder wechseln Sie die Proxys häufiger. Spitzenverkehr wird schneller als gleichmäßiges Volumen als verdächtig eingestuft.

Fazit

Um Realtor.com von Anfang bis Ende zu scrapen, geht es vor allem darum, die richtigen Komponenten in der richtigen Reihenfolge zu kombinieren: stabile Selektoren festlegen, Anfragen über einen Dienst leiten, der den Anti-Bot-Stack für Sie abwickelt, Listing-URLs zu Detailseiten für den Rest des Datensatzes folgen und vor dem Export Duplikate entfernen. Wenn Sie das richtig machen, haben Sie eine Pipeline, die die nächste Frontend-Umgestaltung übersteht, anstatt daran zu scheitern.

Die schwierigen Teile – die Rotation von Wohnimmobilien, das JS-Rendering und die CAPTCHA-Bearbeitung – sind genau das, was Teams wochenlang aufhält, wenn sie intern entwickelt werden. Es sind auch die Teile, die am meisten davon profitieren, an eine verwaltete Anforderungsschicht delegiert zu werden, damit sich Ihre Ingenieure auf das Parsen, die Modellierung und die nachgelagerte Analyse konzentrieren können.

Wenn Sie lieber keine Proxy-Flotte, keinen Header-Generator und keinen CAPTCHA-Löser selbst betreiben möchten, ist unsere Scraper-API bei WebScrapingAPI genau für diese Art von Aufgabe konzipiert: Sie gibt gerenderten HTML-Code für jede URL zurück, die Sie ihr vorgeben, kümmert sich um Wiederholungsversuche bei 403/429-Fehlern und rotiert private IP-Adressen in 195 Ländern, sodass Ihr Scraper aussieht wie 200 verschiedene Menschen, die Angebote in Cincinnati durchsuchen. Binden Sie sie in den obigen Build ein, und der einzige Code, den Sie pflegen müssen, ist die Parsing-Ebene.

Über den Autor
Raluca Penciuc, Full-Stack-Entwickler @ WebScrapingAPI
Raluca PenciucFull-Stack-Entwickler

Raluca Penciuc ist Full-Stack-Entwicklerin bei WebScrapingAPI. Sie entwickelt Scraper, verbessert Umgehungsstrategien und findet zuverlässige Wege, um die Erkennung auf Zielwebsites zu verringern.

Los geht’s

Sind Sie bereit, Ihre Datenerfassung zu erweitern?

Schließen Sie sich den über 2.000 Unternehmen an, die WebScrapingAPI nutzen, um Webdaten im Unternehmensmaßstab ohne zusätzlichen Infrastrukturaufwand zu extrahieren.