Realtor.com ist eine beliebte Immobilien-Website, die Menschen beim Kauf, Verkauf und der Vermietung von Immobilien hilft. Realtor.com verfügt über eine umfangreiche Datenbank mit Immobilienangeboten. Seine Bedeutung liegt in den beträchtlichen Such- und Verkehrsmengen, die es anzieht. Viele Personen, die nach Häusern oder Immobilieninformationen suchen, nutzen Realtor.com aufgrund seiner benutzerfreundlichen Oberfläche und der umfassenden Angebote.

Anzahl der Einträge auf realtor.com

In diesem Blog untersuchen wir den Prozess des Scrapings von Realtor.com nach Immobiliendaten mit Python. Wir werden alles behandeln, vom Verständnis der Grundlagen des Web Scrapings bis hin zur Bereinigung und Organisation der extrahierten Daten. Tauchen wir also ein und lernen Sie, wie Sie wertvolle Informationen von Realtor.com extrahieren!

Inhaltsverzeichnis

  1. Warum Realtor.com scrapen?
  2. Projektaufbau
  • Installieren von Python und Bibliotheken
  • Auswahl einer IDE
  1. Realtor.com Scraper erstellen
  • Analyse der Immobilienseite von Realtor.com
  • Extrahieren von Daten aus einer einzelnen Eigenschaft mit Python
  1. Immobilien auf Realtor.com finden
  • Nutzung des Suchsystems von Realtor.com zur Immobiliensuche
  • Scraping von Immobilienangeboten von einem bestimmten Standort
  1. Änderungen bei den Einträgen auf Realtor.com beobachten
  • RSS-Feeds von Realtor.com zur Verfolgung von Immobilienänderungen
  • Schreiben eines RSS-Feed-Scrapers zur Überwachung von Änderungen
  1. Herausforderungen und Hindernisse beim Scraping von Realtor.com
  2. Skalieren Sie Realtor.com Scraping mit Crawlbase
  • Crawlbase Crawling API für Anti-Scraping und Bypassing-Beschränkungen
  • Erstellen eines Realtor.com Scrapers mit Crawlbase Crawling API
  1. Abschließende Überlegungen
  2. Häufig gestellte Fragen (FAQs)

1. Warum Realtor.com scrapen?

Das Scraping von Realtor.com bietet Immobilieninformationen, einschließlich Immobilienangebote, Verkaufspreise, Mietpreise und Immobilienmerkmale. Diese Daten dienen als wertvolle Ressource, um über Markttrends auf dem Laufenden zu bleiben und Investitionsmöglichkeiten zu entdecken.

Warum realtor.com scrapen?

Einzelpersonen, die das Scraping von Realtor.com nutzen, können sich in verschiedene Immobiliendetails vertiefen und die Daten für Marktforschung, Investitionsanalysen und zur Identifizierung potenzieller Investitionsaussichten verwenden.

Neben dem Zugriff auf spezifische Immobiliendaten bietet das Scraping von Realtor.com wertvolle Einblicke in die Dynamik des lokalen Immobilienmarktes. Durch die Analyse von Immobilienarten, Standortpräferenzen und Annehmlichkeiten können Immobilienprofis ihre Strategien an die sich ändernden Bedürfnisse von Käufern und Verkäufern anpassen.

Immobilienprofis können historische Daten nutzen und laufende Inserate überwachen, um Marktdynamik, Angebots- und Nachfrageschwankungen sowie Preistrends zu verstehen.

2. Projekt-Setup

Bevor wir uns in das Scraping von Realtor.com stürzen, richten wir unser Projekt ein, um sicherzustellen, dass wir alles haben, was wir brauchen. Wir halten es einfach, indem wir das Zugriffe, schönesuppe4 und lxml Bibliotheken zum Scraping.

Installieren von Python und Bibliotheken

Python-Installation:

  • Wenn Sie Python nicht installiert haben, besuchen Sie python.org um die neueste Version herunterzuladen und zu installieren.
  • Aktivieren Sie während der Installation unbedingt das Kontrollkästchen „Python zu PATH hinzufügen“, um Python einfach über die Befehlszeile auszuführen.

Installation der Bibliothek:

  • Öffnen Sie Ihre Eingabeaufforderung oder Ihr Terminal.

  • Geben Sie die folgenden Befehle ein, um die erforderlichen Bibliotheken zu installieren:

    1
    2
    3
    Pip Installationsanforderungen
    pip install beautifulsoup4
    pip lxml installieren
  • Dadurch werden Anfragen zur Bearbeitung von Webanforderungen, beautifulsoup4 zur HTML-Analyse und lxml zur XML-Analyse installiert.

Auswahl einer IDE

Nachdem wir nun Python und die erforderlichen Bibliotheken installiert haben, wählen wir eine integrierte Entwicklungsumgebung (IDE), um das Programmieren zu vereinfachen. Eine IDE ist eine Softwareanwendung, die einen umfassenden Satz von Tools zum Programmieren bereitstellt.

Es stehen verschiedene IDEs zur Verfügung. Einige beliebte IDEs für Python sind:

  • Visual Studio Code: Visual Studio Code ist leicht und benutzerfreundlich, ideal für Anfänger.
  • PyCharm: PyCharm verfügt über zahlreiche Funktionen und wird in professionellen Umgebungen häufig verwendet.
  • Jupyter Notizbücher: Jupyter-Notebooks eignen sich hervorragend für interaktives und exploratives Coding.

Installation:

  • Laden Sie die von Ihnen gewählte IDE über die bereitgestellten Links herunter und installieren Sie sie.
  • Befolgen Sie die Installationsanweisungen für Ihr Betriebssystem.

Nachdem unser Projekt nun eingerichtet ist, können wir mit dem Scraping von Realtor beginnen. Im nächsten Abschnitt beginnen wir mit dem Extrahieren von Daten aus einer einzelnen Immobilie auf Realtor.com.

3. Realtor.com Scraper erstellen

In diesem Abschnitt krempeln wir die Ärmel hoch und erstellen mit Python einen einfachen Realtor.com-Scraper. Unser Ziel ist es, eine Immobilienseite auf Realtor.com zu analysieren und wertvolle Daten zu extrahieren.

Analyse der Immobilienseite von Realtor.com

Wenn wir Daten von Realtor.com extrahieren möchten, schauen wir uns zunächst genau an, wie eine Immobilienseite aufgebaut ist. Zunächst untersuchen wir eine bestimmte Immobilienseite. Betrachten wir beispielsweise die folgende Seite:

Realtor.com - Immobilieninserat

Immobilienseite für Immobilienmakler

Klicken Sie einfach mit der rechten Maustaste auf die Webseite in Ihrem Browser und wählen Sie „Untersuchen“. Dadurch werden die Entwicklertools angezeigt, mit denen Sie die HTML-Struktur erkunden können. Wir untersuchen das HTML und was entdecken wir? Ein verstecktes Skript namens __NEXT_DATA__.

Skript-Schnappschuss

Dieses Skript enthüllt nicht nur die offensichtlichen Dinge; es zeigt alle Details, auch die, die Ihnen auf den ersten Blick vielleicht nicht auffallen. Schreiben wir nun ein Python-Skript, um diese Daten von der Immobilienseite von Realtor.com abzurufen.

Extrahieren von Daten aus einer einzelnen Eigenschaft mit Python

Schauen wir uns nun den Code an, um Daten aus einer einzelnen Eigenschaftenseite zu extrahieren. Wir verwenden den beautifulsoup4 Bibliothek zum Parsen von HTML und requests zum Stellen von HTTP-Anfragen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
importieren Zugriffe
für bs4 importieren BeautifulSuppe
importieren JSON

def Anfrage stellen(URL):
"""Stellen Sie eine respektvolle Anfrage an die angegebene URL."""
HEADERS = {
"Benutzeragent": „Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0“,
"akzeptieren": „Text/HTML, Anwendung/xhtml+xml, Anwendung/xml;q=0.9, Bild/webp, Bild/apng,*/*;q=0.8“,
"Sprache akzeptieren": „en-US,en;q=0.9“,
"Kodierung akzeptieren": „gzip, entleeren, br“,
„Upgrade-unsichere-Anfragen“: "1",
"sec-fetch-modus": "navigieren",
"sec-fetch-Benutzer": „?1“,
"Sec-Fetch-Site": „Keine“,
"sec-fetch-dest": "dokumentieren",
„Referent“: "https://www.google.com/",
"nicht": "1",
"sec-gpc": "1",
}
versuchen:
Antwort = Anfragen.get(URL, Header=HEADERS)
Response.raise_for_status() # Bei fehlerhaften Anfragen einen HTTPError auslösen
Rückkehr Antwort
ausgeschlossen Anfragen.Ausnahmen.RequestException as e:
drucken(f"Fehler beim Abrufen der Daten von {URL}. Fehler: {e}")
Rückkehr Keine

def Daten aus Skript extrahieren(Suppe):
"""Extrahieren Sie den codierten Text innerhalb des Skriptelements."""
Skriptelement = soup.find('Skript', {'Ich würde': '__NÄCHSTE_DATA__'})
if Skriptelement:
Rückkehr script_element.text
sonst:
drucken(„Keine versteckten Webdaten gefunden.“)
Rückkehr Keine

def parse_json(Datentext):
"""Übersetzen Sie die Sprache des Skripts in ein JSON-Format."""
versuchen:
data_json = json.loads(data_text)
Rückkehr Daten_json['Requisiten']['Seiteneigenschaften'].erhalten('initialReduxState', Keine)
ausgeschlossen json.JSONDecodeError as e:
drucken(f"Fehler beim Dekodieren von JSON: {e}")
Rückkehr Keine

def Immobilienmakler-Immobilie abkratzen(URL):
"""Daten von einer einzelnen Immobilie auf Realtor.com abrufen."""
Antwort = Anfrage stellen(URL)

if Antwort:
Suppe = Schöne Suppe(Antwort.Text, 'html.parser')
Datentext = Daten aus Skript extrahieren (Soup)

if Datentext:
Eigenschaftsdatensatz = parse_json(Datentext)
if Eigenschaftsdatensatz:
Rückkehr Eigenschaftsdatensatz

Rückkehr Keine

def Haupt-
"""Hauptfunktion zum Ausführen des Skripts."""
# URL der Seite mit unserer ausgewählten Immobilie auf Realtor.com
Eigenschafts-URL = „https://www.realtor.com/realestateandhomes-detail/3431-Greenfield-Ave_Los-Angeles_CA_90034_M29505-59111“

# Extrahieren Sie Daten aus der einzelnen Eigenschaft
Ergebnis = scrape_realtor_property(property_url)

# Zeigen Sie das Ergebnis an
if Ergebnis:
drucken(json.dumps(Ergebnis, Einzug=2))

if __name__ == "__hauptsächlich__":
Main()

In unserem Python-Skript haben wir eine Reihe von Funktionen erstellt, um effizient durch die Immobilienseiten von Realtor.com zu navigieren. make_request Die Funktion fordert höflich Daten von der URL der ausgewählten Eigenschaft an und verwendet dabei erweiterte Header, die einen Webbrowser nachahmen sollen. Die extract_data_from_script Funktion dringt in das Skript auf der Seite ein und zeigt versteckte Informationen an. Diese Informationen werden dann von der parse_json Funktion. Die Tastenfunktion, scrape_realtor_propertykoordiniert diese Aktionen, um eine Fülle von Immobiliendaten zu ermitteln. main function, unsere Hauptfigur, steht im Rampenlicht und präsentiert die Entdeckungen des Drehbuchs. Es ist eine digitale Erkundung, die Erkenntnisse auf den Webseiten von Realtor.com ans Licht bringt und bereit ist, diese wertvollen Erkenntnisse zu teilen.

Führen Sie das Skript aus:

Öffnen Sie Ihren bevorzugten Texteditor oder Ihre bevorzugte IDE, kopieren Sie den bereitgestellten Code und speichern Sie ihn in einer Python-Datei. Nennen Sie ihn beispielsweise realtor_scraper.py.

Öffnen Sie Ihr Terminal oder Ihre Eingabeaufforderung und navigieren Sie zu dem Verzeichnis, in dem Sie realtor_scraper.py. Führen Sie das Skript mit dem folgenden Befehl aus:

1
python realtor_scraper.py

Beispielausgabe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{
"Kekse": {},
"Abfrage": {
"Schnecke": [
"3431-Greenfield-Ave_Los-Angeles_CA_90034_M29505-59111"
]
},
"AnspruchModal": {
"auslösen": null,
"Anfangsansicht": null,
"sichtbar": falsch,
"Eigentum": null,
"aktuelleAnsicht": null
},
"Laden": {
"Anspruch wird geladen": falsch,
"unclaimLoading": falsch,
"Seite wird geladen": falsch,
"havenProfileLoading": was immer dies auch sein sollte.,
"nahegelegeneHäuserwerdengeladen": was immer dies auch sein sollte.,
"spotOfferLoading": was immer dies auch sein sollte.,
"Vermietungen in der Nähe werden geladen": was immer dies auch sein sollte.,
"andereGebäudeHäuserLaden": was immer dies auch sein sollte.,
„nhCarouselLoading“: was immer dies auch sein sollte.
},
"Communitydetails": {},
"Eigenschaftsdetails": {
"Hypothek": {
"übernehmbares Darlehen": {
"ist_berechtigt": falsch,
"Transaktionsdatum": null,
"Durchschnittsrate": null,
"Durchschnittsrateanzeige": null,
"monatliche_Zahlung": null,
"__Typname": „Übernehmbares Darlehen“
},
..... mehr

4. Immobilien auf Realtor.com finden

Das Auffinden von Immobilien auf Realtor.com wird durch das Suchsystem vereinfacht. Sehen wir uns an, wie die Suchfunktion auf Realtor.com funktioniert und wie der Scraping-Prozess abläuft.

Nutzung des Suchsystems von Realtor.com zur Immobiliensuche

Das Suchsystem von Realtor.com ist ein leistungsstarkes Tool, mit dem wir Immobilien anhand verschiedener Kriterien finden können, wie zum Beispiel Lage, Preisklasse und Immobilientyp. Unser Ziel ist es, dieses System zu nutzen, um Immobilienangebote effizient abzurufen.

Immobilienmakler SERP

Wenn wir eine Suche durchführen, enthält die Ergebnisseite wichtige Metadaten, einschließlich der Gesamtzahl der im angegebenen Bereich verfügbaren Seiten und Einträge.

Die URL-Struktur der Suchergebnisse folgt einem klaren Muster und ist somit für unseren Scraper praktisch:

1
https://www.realtor.com/realestateandhomes-search/<CITY>\_<STATE>/Seite-<SEITE>

Das Verständnis dieser Struktur ermöglicht es uns, einen Scraper zu entwickeln, der in der Lage ist, alle Immobilienangebote eines bestimmten geografischen Standorts zu extrahieren und dabei Variablen wie Stadt und Staat zu nutzen.

Scraping von Immobilienangeboten von einem bestimmten Standort

Nehmen wir an, wir wollen Scrapen Sie die Daten von Immobilien in Los Angeles, Kalifornien. Um dies zu erreichen, haben wir das vorherige Skript aktualisiert und eine Funktion namens find_properties erstellt, die einen Staat und eine Stadt als Parameter verwendet. Diese Funktion erstellt die entsprechende Such-URL, stellt eine entsprechende Anfrage an Realtor.com und analysiert dann die Suchergebnisse.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
importieren Zugriffe
für bs4 importieren BeautifulSuppe
importieren JSON

def Anfrage stellen(URL):
"""Stellen Sie eine respektvolle Anfrage an die angegebene URL."""
HEADERS = {
"Benutzeragent": „Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0“,
"akzeptieren": „Text/HTML, Anwendung/xhtml+xml, Anwendung/xml;q=0.9, Bild/webp, Bild/apng,*/*;q=0.8“,
"Sprache akzeptieren": „en-US,en;q=0.9“,
"Kodierung akzeptieren": „gzip, entleeren, br“,
„Upgrade-unsichere-Anfragen“: "1",
"sec-fetch-modus": "navigieren",
"sec-fetch-Benutzer": „?1“,
"Sec-Fetch-Site": „Keine“,
"sec-fetch-dest": "dokumentieren",
„Referent“: "https://www.google.com/",
"nicht": "1",
"sec-gpc": "1",
}
versuchen:
Antwort = Anfragen.get(URL, Header=HEADERS)
Response.raise_for_status() # Bei fehlerhaften Anfragen einen HTTPError auslösen
Rückkehr Antwort
ausgeschlossen Anfragen.Ausnahmen.RequestException as e:
drucken(f"Fehler beim Abrufen der Daten von {URL}. Fehler: {e}")
Rückkehr Keine

def Daten aus Skript extrahieren(Suppe):
"""Extrahieren Sie den codierten Text innerhalb des Skriptelements."""
Skriptelement = soup.find('Skript', {'Ich würde': '__NÄCHSTE_DATA__'})
if Skriptelement:
Rückkehr script_element.text
sonst:
drucken(„Keine versteckten Webdaten gefunden.“)
Rückkehr Keine

def parse_json(Datentext):
"""Übersetzen Sie die Sprache des Skripts in ein JSON-Format."""
versuchen:
data_json = json.loads(data_text)
Rückkehr {
'Ergebnisse': Daten_json['Requisiten']['Seiteneigenschaften']['Eigenschaften'] or Daten_json["Suchergebnisse"]["Startseite_Suche"]["Ergebnisse"],
'gesamt': Daten_json['Requisiten']['Seiteneigenschaften'][„Gesamteigenschaften“] or Daten_json['Suchergebnisse']['Startseite_Suche']['gesamt']
}
ausgeschlossen json.JSONDecodeError as e:
drucken(f"Fehler beim Dekodieren von JSON: {e}")
Rückkehr Keine

def Eigenschaften finden(Staat, Stadt, max_pages=1):
"""Durchsuchen Sie Realtor.com nach Immobilienvorschaudaten."""
Suchergebnisse = []

für Seitennummer in Angebot(1, max_Seiten + 1):
# Erstellen Sie die Such-URL basierend auf Bundesland, Stadt und Seitenzahl
Such-URL = f"https://www.realtor.com/realestateandhomes-search/{Stadt}_{state.upper()}/Seite-{Seitenzahl}"

# Anfrage stellen und Suchergebnisse analysieren
Suchantwort = Anfrage stellen(Such-URL)
if Suchantwort:
Suchsuppe = Schöne Suppe(Suchantwort.text, 'html.parser')
Datentext = Daten aus Skript extrahieren (Suchsuppe)

if Datentext:
Suchergebnisse.anhängen(parse_json(Datentext))

Rückkehr Suchergebnisse if Suchergebnisse sonst Keine

def Haupt-
"""Hauptfunktion zum Ausführen des Skripts."""
Suchergebnisse = Eigenschaften finden("CA", "Los Angeles")
if Suchergebnisse:
drucken(json.dumps(Suchergebnisse, Einzug=2))

if __name__ == "__hauptsächlich__":
Main()

Innerhalb der find_properties Funktion durchläuft eine Schleife den Bereich der Seitenzahlen und erstellt dynamisch die Such-URL für jede Seite unter Verwendung des angegebenen Bundeslandes, der Stadt und der Seitenzahl. Für jede URL wird eine entsprechende Anfrage unter Verwendung der make_request Funktion, und der HTML-Inhalt wird analysiert mit beautifulsoup4. Die versteckten Webdaten mit den Immobilieninformationen werden dann extrahiert und in ein strukturiertes JSON-Format verarbeitet. parse_json Funktion. Die Eigenschaftsvorschauen von jeder Seite werden an die search_results Liste, und der endgültige Datensatz wird zurückgegeben.

Beispielausgabe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
[
{
"Ergebnisse": [
{
"Eigenschafts-ID": "1783935941",
"Listenpreis": 139000000,
"Suchaktionen": null,
"Hauptfoto": {
"href": "https://ap.rdcpix.com/03c22078a06cd1bbd7a73a45a0ad6a08l-m1746835519s.jpg"
},
"Mietkauf": null,
"Listing-ID": "2960541535",
"Matterport": falsch,
"virtuelle_touren": null,
"Status": "zu_verkaufen",
"Produkte": {
"Produkte": [
"Kern.Agent",
"core.broker",
"co_broke"
],
"Markenname": "Grundausstattung"
},
"Quelle": {
"Ich würde": "WECA",
"Typ": "mls",
"Spezifikations-ID": null,
"plan_id": null,
"Agenten": [
{
"Büroname": null
}
]
},
"Lead-Attribute": {
"Kontakt zu einem Agenten anzeigen": was immer dies auch sein sollte.,
"opcity_lead_attributes": {
"cashback_aktiviert": falsch,
"Flip_the_Market_aktiviert": was immer dies auch sein sollte.
},
"Lead-Typ": "co_broke",
"bereite_Verbindung_Hypothek": {
"Kontakt zu einem Kreditgeber anzeigen": falsch,
"show_veterans_united": falsch
}
},
"Gemeinschaft": null,
"Permalink": "1200-Bel-Air-Rd_Los-Angeles_CA_90077_M17839-35941",
"Preis_reduzierter_Betrag": null,
„Beschreibung“: {
"Name": null,
"Betten": 12,
"Bäder_konsolidiert": "17",
"Quadratfuß": null,
"Grundstücksfläche_Quadratfuß": 90661,
"Bäder_max": null,
"Badezimmer_min": null,
"Betten_min": null,
"Betten_max": null,
"Quadratfuß_min": null,
"Quadratfuß_max": null,
"Typ": "Einfamilienhaus",
"Untertyp": null,
"Verkaufspreis": 5000000,
"Verkaufsdatum": "2014-01-07"
},
"Lage": {
"Streetview-URL": "https://maps.googleapis.com/maps/api/streetview?channel=rdc-streetview&client=gme-movesalesinc&location=1200%20Bel%20Air%20Rd%2C%20Los%20Angeles%2C%20CA%2090077&size=640x480&source=outdoor&signature=SMRMuUUmlluuaqqdjwbYoyJY6_s=",
"Adresse": {
"Linie": „1200 Bel Air Straße“,
"Postleitzahl": "90077",
"Zustand": "Kalifornien",
"Staatscode": "CA",
"Stadt": "Los Angeles",
"koordinieren": {
"lat": 34.095258,
"lon": -118.443349
}
},
"County": {
"Name": "Los Angeles",
"fips_code": "06037"
}
},
"Tage der offenen Tür": null,
"Markenbildung": [
{
"Typ": "Büro",
"Name": "Nestsucher",
"Photo": null
}
],
"Flaggen": {
"kommt_bald": null,
"ist_neue_Auflistung": falsch,
"ist_preis_reduziert": null,
"ist_Zwangsvollstreckung": null,
"ist_Neubau": null,
"steht noch aus": null,
"ist_kontingent": null
},
"Listendatum": "2023-10-13T20:39:03.000000Z",
"Fotos": [
{
"href": "https://ap.rdcpix.com/03c22078a06cd1bbd7a73a45a0ad6a08l-m1746835519s.jpg"
},
{
"href": "https://ap.rdcpix.com/03c22078a06cd1bbd7a73a45a0ad6a08l-m4249782786s.jpg"
}
],
"Werbetreibende": [
{
"Typ": "Verkäufer",
"Baumeister": null
}
]
},
..... mehr
],
"gesamt": 7505
}
]

5. Änderungen bei den Einträgen auf Realtor.com beobachten

Bleiben Sie mit den leistungsstarken RSS-Feeds von Realtor.com über die neuesten Entwicklungen auf dem Immobilienmarkt auf dem Laufenden. Dieser Abschnitt führt Sie durch die Verwendung der RSS-Feeds von Realtor.com, um über wichtige Immobilien-Updates auf dem Laufenden zu bleiben. Erfahren Sie, wie Sie einen personalisierten RSS-Feed-Scraper erstellen, um diese Änderungen mühelos zu überwachen und im Immobiliengeschäft die Nase vorn zu behalten.

RSS-Feeds von Realtor.com zur Verfolgung von Immobilienänderungen

Realtor.com bietet eine Reihe spezialisierter RSS-Feeds, die jeweils auf bestimmte Immobilienereignisse eingehen. Diese Feeds umfassen:

Diese Ressourcen sind praktisch, um das Geschehen auf dem Immobilienmarkt im Auge zu behalten. Sie können Preisanpassungen, neue Immobilienangebote und Verkäufe im Auge behalten, sobald sie stattfinden!

Jeder Feed ist nach US-Bundesstaaten organisiert und ist lediglich eine einfache RSS-XML-Datei mit Ankündigungen und Terminen. Schauen wir uns zum Beispiel an: Preisänderungs-Feed für Los Angeles.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml-Version="1.0" Kodierung="utf-8"?>
<rss xmlns:atom=„http://www.w3.org/2005/Atom“ Version="2.0">
<Kanal>
<Titel>Preis geändert</Titel>
<Link>https://www.realtor.com</Link>
<Beschreibung/>
<atom:link href=„https://pubsubhubbub.appspot.com/“ rel="Nabe"/>
<atom:link href=„https://www.realtor.com/realestateandhomes-detail/sitemap-rss-price/rss-price-la.xml“ rel="selbst"/>
<Artikel>
<Link>https://www.realtor.com/rentals/details/1020-Terpsichore-St-Apt-F_New-Orleans_LA_70130_M79596-86987</Link>
<pubdate>Mo, 26. Februar 2024 15:42:33</pubdate>
</Artikel>
<Artikel>
<Link>https://www.realtor.com/realestateandhomes-detail/Springfield-Rd_Walker_LA_70785_M88932-83769</Link>
<pubdate>Mo, 26. Februar 2024 15:45:36</pubdate>
</Artikel>
<Artikel>
<Link>https://www.realtor.com/realestateandhomes-detail/7012-Highway-4_Ringgold_LA_71068_M87385-92048</Link>
<pubdate>Mo, 26. Februar 2024 15:50:06</pubdate>
</Artikel>
..... mehr Artikel hier
</Kanal>
</rss>

Wir können sehen, dass es Links zu Eigenschaften und den Daten der Preisänderungen enthält.

Schreiben eines RSS-Feed-Scrapers zur Überwachung von Änderungen

Schreiben wir nun einen benutzerdefinierten RSS-Feed-Scraper, um Änderungen in den Einträgen von Realtor.com aktiv zu überwachen und zu erfassen. Befolgen Sie diese wichtigen Schritte:

  1. Kratzen Sie das Futter regelmäßig ab:
  • Richten Sie Ihren Scraper so ein, dass der Feed in regelmäßigen Abständen (z. B. alle X Sekunden) abgerufen wird.
  1. Elemente für Eigenschafts-URLs analysieren:
  • Extrahieren Sie Eigenschafts-URLs aus dem analysierten RSS-Feed.
  1. Nutzen Sie Property Scraper zum Sammeln von Datensätzen:
  • Verwenden Sie Ihren Immobilien-Scraper, um detaillierte Datensätze für jede aus dem Feed abgerufene Immobilien-URL zu sammeln.
  1. Daten speichern und wiederholen:
  • Speichern Sie die gesammelten Daten in einer Datenbank oder Datei.
  • Wiederholen Sie den gesamten Vorgang, indem Sie zu Schritt 1 zurückkehren.

Sehen wir uns ein Python-Beispiel an, wie dieser Prozess implementiert werden kann. In diesem Atom RSS-Feed Scraper scrapen wir den Feed alle 5 Minuten und hängen die Ergebnisse an eine JSON-Listendatei an, mit einem JSON-Objekt pro Zeile.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
importieren Zugriffe
für bs4 importieren BeautifulSuppe
importieren Asyncio
importieren JSON
für datetime importieren datetime
für Pfadlib importieren Path
für lxml importieren Etree
für io importieren BytesIO

# Anmerkungen: Code vom Realtor.com Property Scraper einfügen (Abschnitt 3)

async def Scrape_Feed - Das ist eine tolle Sache!(URL):
"""Durchsucht den Atom-RSS-Feed und gibt alle Einträge im Format "URL: Veröffentlichungsdatum" zurück"""
Antwort = Anfrage stellen(URL)
if Antwort:
Parser = etree.XMLParser(wiederherstellen=Wahre)
Baum = etree.parse(BytesIO(Antwort.text.encode('utf-8')), Parser)
root = baum.getroot()

Ergebnisse = {}

für Artikel in root.xpath("//Artikel"):
Eintrags-URL = Element.xpath("Link/Text()")[0] if Element.xpath("Verknüpfung") sonst Keine
pub_date = Element.xpath("pubDate/text()")[0] if Element.xpath("Veröffentlichungsdatum") sonst Keine

# Überprüfen Sie, ob sowohl entry_url als auch pub_date nicht None sind, bevor Sie sie zu den Ergebnissen hinzufügen
if Eintrags-URL is nicht Keine und Veröffentlichungsdatum is nicht Keine:
Ergebnisse[Eintrags-URL] = datetime.strptime(pub_date, „%a, %d %b %Y %H:%M:%S“)

Rückkehr Ergebnisse

Rückkehr Keine

async def Track_Feed(url: str, Ausgabe: Pfad, Intervall: int = 300):
"""Verfolgen Sie den Feed von Realtor.com, extrahieren Sie neue Einträge und hängen Sie sie als JSON an die Ausgabedatei an."""
gesehen = kompensieren()
Ausgabe.touch(exist_ok=Wahre)

versuchen:
während Wahre:
# Feed nach Einträgen durchsuchen
Einträge = – warten auf Sie! scrape_feed(URL)
Eigenschaften = []
# Einträge entfernen, die in vorherigen Schleifen gelöscht wurden
Einträge = {Eintrags-URL: Veröffentlichungsdatum für Eintrags-URL, Veröffentlichungsdatum in Einträge.Artikel() if f"{entry_url}:{Veröffentlichungsdatum}" nicht in gesehen}
if Einträge:
# Eigenschaften extrahieren und in Datei speichern - 1 Eigenschaft als JSON pro Zeile
für URL in Einträge.Schlüssel():
Eigenschaften.anhängen(scrape_realtor_property(url))

mit Ausgabe.XNUMXh geöffnet("ein") as f:
f. schreiben ("\n".beitreten(json.dumps(Resorts) für Resorts in Eigenschaften))

# Gesehene Einträge zum Deduplizierungsfilter hinzufügen
für Eintrags-URL, Veröffentlichungsdatum in Einträge.Artikel():
gesehen.add(f"{entry_url}:{Veröffentlichungsdatum}")

drucken(f"Gekratzt {len(Eigenschaften)} Eigenschaften; Warten {Intervall} Sekunden")
– warten auf Sie! asyncio.sleep(Intervall)

ausgeschlossen Tastaturunterbrechung:
drucken(„Feed-Tracking wird gestoppt“)

async def Haupt-
# zum Beispiel Preis-Feed für Los Angeles
feed_url = f"https://www.realtor.com/realestateandhomes-detail/sitemap-rss-price/rss-price-la.xml"

– warten auf Sie! track_feed(Feed-URL, Pfad(„Maklerpreis-RSS-Feed-Tracker.jsonl“))

if __name__ == "__hauptsächlich__":
asyncio.run(main())

Die scrape_feed Die Funktion extrahiert Einträge aus dem Feed, die die URLs der Immobilien und ihre Veröffentlichungsdaten enthalten, im Format „URL: Veröffentlichungsdatum“. Die track_feed Die Funktion überwacht den Feed kontinuierlich, sammelt neue Einträge und hängt sie als JSON-Einträge an eine Ausgabedatei an, wobei Duplikate vermieden werden. Die main Funktion richtet die URL für den Realtor.com-Preis-Feed für Los Angeles ein und initiiert den Tracking-Prozess. Die Ergebnisse werden in einer Datei mit dem Namen gespeichert. realtor-price-rss-feed-tracker.jsonlDas Programm läuft asynchron unter Verwendung der asyncio Bibliothek.

6. Herausforderungen und Hindernisse beim Scraping von Realtor.com

Beim Scraping von Daten von Realtor.com können einige Herausforderungen auftreten. Realtor.com ist eine dynamische Plattform, d. h. ihre Struktur kann sich ändern, was es etwas schwierig macht, die benötigten Informationen konsistent zu finden und zu extrahieren.

Herausforderungen beim Scraping von realtor.com

Änderungen an der Website:

Realtor.com legt Wert darauf, die Dinge frisch zu halten, und dazu gehört auch das Aussehen und Verhalten seiner Website. Daher kann es vorkommen, dass sich die Einrichtung der Website ändert. Das bedeutet, dass Sie auf dem Laufenden bleiben und Ihren Scraping-Ansatz bei Bedarf anpassen müssen.

Anti-Scraping-Maßnahmen:

Um seine Daten zu schützen, verfügt Realtor.com über Maßnahmen, um automatisiertes Scraping zu erkennen und zu blockieren. Dies könnte dazu führen, dass Ihre IP gesperrt wird oder Sie mit diesen lästigen CAPTCHA-Herausforderungen konfrontiert werden. Um dies zu verhindern, müssen Sie bei Ihrer Interaktion mit der Site klug vorgehen, um eine Erkennung zu vermeiden.

Vermeidung von IP-Sperren:

Wenn Sie beim Scraping zu aggressiv vorgehen, blockiert Realtor.com möglicherweise Ihre IP oder beschränkt Ihren Zugriff. Um dies zu verhindern, können Sie die Rate, mit der Sie Anfragen stellen, steuern und zwischen verschiedenen Proxy-IP-Adressen wechseln. Die Crawlbase Crawling API kann praktisch sein, um diese Einschränkungen zu umgehen.

Umgang mit JavaScript:

Einige Teile von Realtor.com verwenden JavaScript, um Inhalte anzuzeigen. Um sicherzustellen, dass Sie alles abrufen, was Sie benötigen, müssen Sie Ihre Scraping-Methoden möglicherweise ein wenig anpassen.

Die Bewältigung dieser Herausforderungen erfordert ein wenig Fingerspitzengefühl, aber mit den richtigen Strategien können Sie sich durchkämpfen und die Daten erhalten, nach denen Sie suchen. Im nächsten Abschnitt werden wir untersuchen, wie die Crawlbase Crawling API kann ein wertvolles Werkzeug sein, um Ihre Scraping-Bemühungen effizienter und skalierbarer zu gestalten.

7. Skalieren Sie Realtor.com Scraping mit Crawlbase

Lassen Sie uns nun darüber sprechen, wie Sie Ihr Scraping-Spiel auf Realtor.com auf die nächste Stufe bringen. Die Ausweitung Ihrer Bemühungen kann eine Herausforderung sein, insbesondere wenn es um Anti-Scraping-Maßnahmen und -Einschränkungen geht. Hier kommt die Crawlbase ins Spiel. Crawling API tritt als mächtiger Verbündeter ein.

Crawlbase Crawling API für Anti-Scraping und Umgehung von Beschränkungen

Realtor.com, wie viele andere Websites, schätzt automatisiertes Scraping nicht immer. Sie verfügen möglicherweise über Maßnahmen, um solche Aktivitäten zu erkennen und zu blockieren. Hier kommt Crawlbase ins Spiel. Crawling API wird zu Ihrer Geheimwaffe.

Kratzschutz:

Crawlbase Crawling API ist mit Funktionen ausgestattet, die menschliche Interaktionen nachahmen und Ihnen helfen, unter dem Radar zu bleiben. Es navigiert intelligenter durch die Website und vermeidet so die Erkennung und mögliche Sperren.

Umgehen von IP-Sperren:

Wenn Sie jemals die Frustration erlebt haben, dass Ihre IP blockiert wurde, kommt Crawlbase zur Rettung. Es ermöglicht Ihnen, zwischen verschiedenen IP-Adressen wechseln, wodurch lästige Verstopfungen vermieden und ein unterbrechungsfreies Schaben gewährleistet wird.

Erstellen eines Realtor.com Scrapers mit Crawlbase Crawling API

Jetzt werden wir praktisch. Wie integrieren Sie die Crawlbase Crawling API in Ihren Realtor.com Scraper? Folgen Sie diesen Schritten:

  1. Melden Sie sich bei Crawlbase an:

Besuchen Sie die Crawlbase-Website und Registrieren für ein Konto. Nach der Anmeldung stellen wir Ihnen zwei Arten von API-Tokens zur Verfügung (normales Token, JS-Token). Sie müssen eines dieser Tokens bei der Authentifizierung bei Crawlbase angeben Crawling API.

  1. Auswählen eines Tokens:

Crawlbase bietet zwei Arten von Token: Normale Token, die auf statische Websites zugeschnitten sind, und JS-Token, die für dynamische oder JavaScript-basierte Websites entwickelt wurden. Da unser Schwerpunkt auf dem Scraping von realtor.com liegt, sind normale Token eine gute Wahl.

Hinweis: Die ersten 1000 Anfragen sind kostenlos. Keine Karte erforderlich.

  1. Installieren Sie die Crawlbase-Bibliothek:

Verwenden Sie pip, um die Crawlbase-Bibliothek zu installieren. Diese Bibliothek ist die Brücke zwischen Ihrem Python-Skript und der Crawlbase Crawling API.

1
$ pip installiere Crawlbase

Lesen Sie die Dokumentation zur Crawlbase Python-Bibliothek HIER.

  1. Passen Sie Ihr Skript an:

So verwenden Sie Crawlbase Crawling API in den Realtor.com-Scraper, um HTTP-Anfragen anstelle der Anforderungsbibliothek zu stellen. Sie können eine Funktion wie unten erstellen und diese Funktion zum Stellen von Anfragen verwenden.

1
2
3
4
5
6
7
8
9
10
11
12
13
für Crawlbase importieren CrawlingAPI

crawling_api = CrawlingAPI({ 'Zeichen': 'IHR_CRAWLBASE_TOKEN' })

def Crawlbase-Anfrage erstellen(URL):
Antwort = crawling_api.get(URL)

if Antwort['Kopfzeilen']['pc_status'] == '200':
html_content = Antwort['Körper'].dekodieren('utf-8')
Rückkehr HTML-Inhalt
sonst:
drucken(f"Seite konnte nicht abgerufen werden. Crawlbase-Statuscode: {Antwort['Kopfzeilen']['pc_status']}")
Rückkehr Keine

Durch die nahtlose Integration von Crawlbase in unseren Realtor.com Scraper können wir unsere Scraping-Funktionen verbessern und durch Anti-Scraping-Maßnahmen und -Einschränkungen eine reibungslosere Navigation gewährleisten. Dieses dynamische Duo aus Realtor.com Scraping und Crawlbase ermöglicht es uns, Daten effizienter und in größerem Umfang zu extrahieren.

8. Letzte Gedanken

Das Scraping von Immobiliendaten von Realtor.com erfordert ein Gleichgewicht zwischen Einfachheit und Effizienz. Während traditionelle Methoden ihre Vorteile haben, ist die Einbindung der Crawlbase Crawling API verbessert Ihr Scraping-Erlebnis. Verabschieden Sie sich von üblichen Herausforderungen und nutzen Sie eine nahtlose, vertrauenswürdige und skalierbare Lösung mit der Crawlbase Crawling API für das Scraping von Realtor.com.

Wenn Sie sich für das Scraping von Daten aus verschiedenen Plattformen interessieren, können Sie unsere aufschlussreichen Anleitungen lesen:

📜 So scrapen Sie Zillow
📜 Wie man Airbnb scrapt
📜 Wie man Booking.com scrapt
📜 So scrapen Sie Expedia

Begeben Sie sich voller Zuversicht auf Ihre Scraping-Reise! Sollten Sie auf Hindernisse stoßen oder Hilfe benötigen, unsere engagiertes Team steht bereit, Sie bei der Navigation durch die sich ständig weiterentwickelnde Landschaft der Immobiliendaten zu unterstützen. Viel Spaß beim Scraping!

9. Häufig gestellte Fragen (FAQs)

F. Warum sollte ich Realtor.com nach Immobiliendaten durchsuchen?

Realtor.com ist eine der größten Immobilien-Websites in den USA und damit eine unvergleichliche Quelle für einen riesigen öffentlichen Immobiliendatensatz. Dieser Datensatz umfasst wichtige Details wie Immobilienpreise, Standorte, Verkaufsdaten und umfassende Immobilieninformationen. Das Scraping von Realtor.com ist von unschätzbarem Wert für Marktanalysen, das Verständnis von Trends in der Immobilienbranche und das Erlangen eines umfassenden Überblicks über Ihre Konkurrenten.

F: Welche Tools und Bibliotheken kann ich für das Scraping von Realtor.com verwenden?

Wenn Sie sich mit dem Scraping von Realtor.com befassen, erweist sich Python als robuste Wahl. Durch die Nutzung beliebter Bibliotheken wie requests zum Stellen von HTTP-Anfragen und BeautifulSoup4 für HTML-Parsing rationalisiert den Scraping-Prozess. Für skalierbares Scraping können Sie erweiterte Lösungen wie Crawlbase erkunden. Crawling API. Diese Dienste bieten wirksame Maßnahmen zur Bewältigung von Herausforderungen wie Anti-Scraping-Mechanismen.

F: Wie kann ich Änderungen in den Einträgen auf Realtor.com in Echtzeit verfolgen?

Realtor.com bietet praktische RSS-Feeds, die umgehend über verschiedene Immobilienänderungen informieren, darunter Preisänderungen, Tage der offenen Tür, Immobilienverkäufe und neue Angebote. Um diese Änderungen in Echtzeit im Auge zu behalten, können Sie einen benutzerdefinierten RSS-Feed-Scraper entwickeln. Dieser Scraper kann so programmiert werden, dass er in regelmäßigen Abständen ausgeführt wird, sodass Sie über die neuesten Entwicklungen auf dem Immobilienmarkt auf dem Laufenden bleiben.

F: Welche Maßnahmen kann ich ergreifen, um eine Blockierung beim Scraping von Realtor.com zu vermeiden?

Scraping in großem Maßstab birgt oft das Risiko, blockiert zu werden oder auf Captchas zu stoßen. Um dies zu mildern, sollten Sie erweiterte Dienste wie Crawlbase nutzen. Crawling API. Diese Plattformen bieten Funktionen wie Anti Scraping Protection Bypass, JavaScript-Rendering und Zugriff auf einen umfangreichen Pool an Residential- oder Mobile-Proxys. Zusammen sorgen diese Maßnahmen für ein reibungsloseres Scraping-Erlebnis ohne Unterbrechungen.

F: Was ist Scraping im Immobilienbereich?

Beim Scraping im Immobilienbereich werden mithilfe von Web-Scraping-Tools Daten von Websites mit Immobilienangeboten gesammelt, beispielsweise zu Preisen, Standorten, Merkmalen und Markttrends, um diese zu analysieren oder für geschäftliche Zwecke zu verwenden.

F: Welche Auswirkungen hat Web Scraping auf Immobilien?

Web Scraping verändert die Immobilienbranche, indem es bessere Marktanalysen, wettbewerbsfähige Preise und automatisierte Lead-Generierung ermöglicht und Käufern und Investoren aktuelle Einblicke bietet. Eine unsachgemäße Verwendung kann jedoch rechtliche und ethische Bedenken aufwerfen.