Haben Sie schon einmal versucht, Daten von Immobilien-Websites zu scrapen, und sind dabei auf eine Mauer aus CAPTCHAs, Ratenbegrenzungen, Weiterleitungen oder IP-Sperren gestoßen? Es ist, als ob man sich die ganze Mühe macht und kurz vor dem Ziel feststeckt.

Wenn Sie also ein Gründer sind, der eine Datenplattform für Mietobjekte aufbaut, oder ein Entwickler, der lediglich Angebote in Excel sammeln möchte, um daraus Erkenntnisse zu gewinnen, können solche Hindernisse ein K.O.-Kriterium sein.

Was wäre, wenn es einen einfacheren Weg gäbe, präzise und strukturierte Immobiliendaten ohne die üblichen Probleme zu extrahieren – und wenn über 70,000 Entwicklerteams diesem Weg vertrauen würden? Klingt wie ein Märchen, oder? Nicht ganz. Lernen Sie uns kennen. Crawlbase, das einzige Tool, das Sie jemals für KI-gestütztes Web-Scraping benötigen werden.

Hier ist eine kurze Anleitung zur Automatisierung von Immobilienprozessen mit Crawlbase:

Schritt-für-Schritt-Anleitung zum Erstellen eines Immobilien-Daten-Scrapers

Diese Anleitung zeigt, wie man Immobilienangebote von zwei Immobilien-Websites extrahiert – Anwesend mit einem Re/Max mit dem Crawlbase Crawling APIWir extrahieren Daten wie Preis, Anzahl der Betten, Anzahl der Bäder, Wohnfläche und Adresse und exportieren diese anschließend in eine Excel-Tabelle.

Automatisieren Sie Immobilienprozesse mit Crawlbase

Sie müssen sich nicht um Proxys, CAPTCHA oder JavaScript-Rendering kümmern. Crawlbase Das erledigt das alles für Sie. Also, keine Sorge, legen wir los.

1. Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:

  • Node.js installiert
  • Eine IDE/ein Code-Editor Ihrer Wahl
  • A Crawlbase Crawling API Token → Gutschein wählen (1000 kostenlose Anfragen)
  • Grundkenntnisse in JavaScript/Node (ausreichend zum Lesen von Funktionen)

2. Installieren Sie die erforderlichen Pakete

Öffnen Sie Ihr Terminal und führen Sie aus:

1
2
npm init -y
npm install cheerio exceljs crawlbase

Diese Pakete verwalten:

  • Cheerio: Um Inhalte aus HTML zu extrahieren, ähnlich wie mit jQuery
  • ExcelJS: So schreiben Sie Auflistungen in eine Excel-Datei
  • CrawlbaseUm CAPTCHA, Sperren und Einschränkungen zu umgehen

3. Skriptdateien erstellen und erforderliche Module importieren

Erstellen Sie zunächst 2 neue Dateien für 2 verschiedene Skripte mit den Namen estately.js mit einem remax.jsUnd so würde Ihre Projektstruktur aussehen:

Automatisieren Sie Immobilienprozesse mit Crawlbase

Importieren Sie anschließend die benötigten Bibliotheken, indem Sie Folgendes oben einfügen:

1
2
3
const tschüss = erfordern("Tschüs");
const ExcelJS = erfordern('exceljs');
const { CrawlingAPI } = erfordern(„Crawlbase“);

Diese Codezeilen werden für beide Skripte benötigt, also vergessen Sie nicht, sie hinzuzufügen.

Schauen wir uns nun an, was anders ist.

Da wir zwei verschiedene Skripte für zwei verschiedene Immobilien-Website-Einträge haben, gehen wir folgendermaßen vor:

  1. Zunächst werden wir den vollständigen Funktionscode für jedes Skript bereitstellen.
  2. Zweitens betrachten Sie den Code als Ganzes und probieren ihn aus.
  3. Zum Schluss gehen wir das Estately-Skript Schritt für Schritt durch. Da beide Skripte eine ähnliche Struktur aufweisen, wird das Verständnis des einen das Verständnis des anderen deutlich erleichtern.

1. Wie man Estately-Daten extrahiert

Was es macht:

  • Besucht die Immobilienangebote von Estately in Cape Coral
  • Auszüge aus Preis, Betten, Bädern, Quadratmeterzahl und Adresse
  • Speichert alles in Excel

Diese Funktion hinzufügen:

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
// Vergessen Sie nicht, die oben stehende gemeinsame Logik hinzuzufügen.
(async () => {
versuchen {
const API = neu CrawlingAPI({ Zeichen: 'IHR TOKEN' });
const URL = 'https://www.estately.com/FL/Cape_Coral';
const Antwort = – warten auf Sie! api.bekommen(URL);
const html = Antwort?.Körper;
const $ = Prost.Belastung(html);

const Eigenschaften = [];

$('div.result-item-details').jeder((i, cardEl) => {
const Karte = $(cardEl);

const Preis = Karte.gefunden('p.result-price strong').Text().trimmen();
const Preis = parseFloat(Preis.ersetzen(/[^0-9.]/g, ''));

const Betten = Karte.gefunden('ul.result-basics-grid li').eq(0).gefunden('B').Text().trimmen();
const Bäder = Karte.gefunden('ul.result-basics-grid li').eq(1).gefunden('B').Text().trimmen();
const Quadratfuß = Karte.gefunden('ul.result-basics-grid li').eq(2).gefunden('B').Text().trimmen();

const addressFull = Karte.gefunden('a.margin-0.small.limit-line-length').Text().trimmen();

if (Preis) {
Eigenschaften.drücken({
Preis,
PreisWert,
Betten,
Bad,
Quadratfuß
address1: addressFull,
});
}
});

// Nach Preis sortieren
Eigenschaften.sortieren((a, b) => a.Preiswert - B.Preiswert);

// In Excel schreiben
const Arbeitsmappe = neu ExcelJS.Workbook();
const Blatt = Arbeitsmappe.Arbeitsblatt hinzufügen('Eigenschaften');

Blatt.Spalten = [
{ Kopfzeile: 'Preis', Haupt: 'Preis', Breite: 15 },
{ Kopfzeile: 'Betten', Haupt: 'Betten', Breite: 10 },
{ Kopfzeile: 'Bad', Haupt: 'Bad', Breite: 10 },
{ Kopfzeile: 'Quadratfuß', Haupt: 'sqft', Breite: 12 },
{ Kopfzeile: 'Adresse', Haupt: 'Adresse1', Breite: 30 },
];

Eigenschaften.für jeden((p) => Blatt.Zeile hinzufügen(P));

const Zeitstempel = neu Datum().toISOString().ersetzen(/[:.]/G, '-');
const Dateipfad = `estately_property_data_${timestamp}.xlsx`;

– warten auf Sie! Arbeitsmappe.XLSX.Datei schreiben(Dateipfad);

trösten.Log(✅ Ausgelesen und gespeichert ${properties.length} Eigenschaften zu ${filePath}`);
} Fang (Fehler) {
trösten.Fehler(`❌ Scraping fehlgeschlagen: ${Fehlernachricht}`);
}
}) ();

Öffnen Sie nun Ihr Terminal und führen Sie folgenden Befehl aus: node estately.jsund sehen Sie sich die Ergebnisse an:

Automatisieren Sie Immobilienprozesse mit Crawlbase

Das Ergebnis:

Automatisieren Sie Immobilienprozesse mit Crawlbase

2. Wie man Remax-Reste abkratzt

Was es macht:

  • Durchsucht die Mietangebote von Re/Max in Los Angeles
  • Auszüge aus Preis, Betten, Bädern, Quadratmeterzahl und Adresse
  • Sortiert nach Preis und speichert in Excel

Diese Funktion hinzufügen:

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
// Vergessen Sie nicht, die oben stehende Shared-Logik hinzuzufügen.
(async () => {
versuchen {
const API = neu CrawlingAPI({ Zeichen: 'IHR TOKEN' });
const URL = 'https://www.remax.com/homes-for-rent/ca/los-angeles/city/0644000';
const Antwort = – warten auf Sie! api.bekommen(URL);
const html = Antwort?.Körper;
const $ = Prost.Belastung(html);

const Eigenschaften = [];

$('li[data-testid="d-li"]').jeder((ich, der) => {
const Karte = $(el);

const Adresse = Karte.gefunden('ad-listing-card-address h3').Text().trimmen();
const Preis = Karte.gefunden('span.d-listing-card-price-container h4').Text().trimmen();
const Preis = parseFloat(Preis.ersetzen(/[^0-9.]/g, ''));

const Betten = Karte.gefunden('p:contains("Betten") strong').zuerst().Text().trimmen();
const Bäder = Karte.gefunden('p:contains("Baths") strong').zuerst().Text().trimmen();
const Quadratfuß = Karte.gefunden('p:contains("Sq Ft") strong').zuerst().Text().trimmen();

if (Preis && Adresse) {
Eigenschaften.drücken({ Preis, Preiswert, Betten, Bäder, Quadratmeter, Adresse });
}
});

Eigenschaften.sortieren((a, b) => a.Preiswert - B.Preiswert);

const Arbeitsmappe = neu ExcelJS.Workbook();
const Blatt = Arbeitsmappe.Arbeitsblatt hinzufügen('Eigenschaften');

Blatt.Spalten = [
{ Kopfzeile: 'Preis', Haupt: 'Preis', Breite: 15 },
{ Kopfzeile: 'Betten', Haupt: 'Betten', Breite: 10 },
{ Kopfzeile: 'Bad', Haupt: 'Bad', Breite: 10 },
{ Kopfzeile: 'Quadratfuß', Haupt: 'sqft', Breite: 12 },
{ Kopfzeile: 'Adresse', Haupt: 'Adresse', Breite: 40 },
];

Eigenschaften.für jeden((p) => Blatt.Zeile hinzufügen(P));

const Zeitstempel = neu Datum().toISOString().ersetzen(/[:.]/G, '-');
const Dateipfad = `remax_property_data_${timestamp}.xlsx`;

– warten auf Sie! Arbeitsmappe.XLSX.Datei schreiben(Dateipfad);
trösten.Log(✅ Ausgelesen und gespeichert ${properties.length} Eigenschaften zu ${filePath}`);
} Fang (Fehler) {
trösten.Fehler(`❌ Fehler: ${Fehlernachricht}`);
}
}) ();

Öffnen Sie nun Ihr Terminal und führen Sie folgenden Befehl aus: node remax.jsund sehen Sie sich die Ergebnisse an:

Automatisieren Sie Immobilienprozesse mit Crawlbase

Die Ergebnisse:

Automatisieren Sie Immobilienprozesse mit Crawlbase

Schritt-für-Schritt-Erklärung für das Estately-Skript

1. Erforderliche Bibliotheken importieren

  • Cheerio: Analysiert und extrahiert Daten aus HTML (ähnlich wie jQuery).
  • exceljs: Hilft beim Erstellen und Speichern von Excel-Dateien.
  • CrawlingAPI: Stammt von Crawlbase zum Abrufen/Rendern von Seiten (insbesondere dynamischen Seiten).
1
2
3
const tschüss = erfordern("Tschüs");
const ExcelJS = erfordern('exceljs');
const { CrawlingAPI } = erfordern(„Crawlbase“);

2. Starten Sie eine asynchrone IIFE.

  • Ein sofort aufgerufener Funktionsausdruck (IIFE) wird verwendet, um asynchronen Code sofort auszuführen.
  • trymit einem catch Behandelt alle Laufzeitfehler.
1
2
3
4
5
6
7
(async () => {
versuchen {
// ...
} Fang (Fehler) {
// ...
}
}) ();

3. Einrichten Crawlbase API und Abrufen der Webseite

  • Initialisiert CrawlingAPI mit Ihrem API-Token.
  • Zielt auf die Immobilienangebote in Cape Coral, Florida auf Estately ab.
  • response.body enthält den HTML-Inhalt der Seite.
1
2
3
4
const API = neu CrawlingAPI({ Zeichen: 'IHR TOKEN' });
const URL = 'https://www.estately.com/FL/Cape_Coral';
const Antwort = – warten auf Sie! api.bekommen(URL);
const html = Antwort?.Körper;

4. HTML mit Cheerio laden

  • Lädt HTML in Cheerio für die DOM-Durchquerung:
1
const $ = Prost.Belastung(html);

5. Immobiliendaten extrahieren

  • Findet alle Eigentumskarten mithilfe von div.result-item-details.
  • Für jede Karte:
    • Extrahiert den Preis und entfernt anschließend $, ,, etc. zur Sortierung. priceValue.
    • Erhält Betten, Bäder und Quadratmeter von <ul> > <li> Struktur.
    • Extrahiert die Adresse.
  • Verschiebt jedes strukturierte Eigenschaftsobjekt an die properties Array.
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
const Eigenschaften = [];

$('div.result-item-details').jeder((i, cardEl) => {
const Karte = $(cardEl);

const Preis = Karte.gefunden('p.result-price strong').Text().trimmen();
const Preis = parseFloat(Preis.ersetzen(/[^0-9.]/g, ''));

const Betten = Karte.gefunden('ul.result-basics-grid li').eq(0).gefunden('B').Text().trimmen();
const Bäder = Karte.gefunden('ul.result-basics-grid li').eq(1).gefunden('B').Text().trimmen();
const Quadratfuß = Karte.gefunden('ul.result-basics-grid li').eq(2).gefunden('B').Text().trimmen();

const addressFull = Karte.gefunden('a.margin-0.small.limit-line-length').Text().trimmen();

if (Preis) {
Eigenschaften.drücken({
Preis,
PreisWert,
Betten,
Bad,
Quadratfuß
address1: addressFull,
});
}
});

6. Objekte nach Preis sortieren (aufsteigend)

  • Sorgt dafür, dass günstigere Immobilien zuerst angezeigt werden.
1
Eigenschaften.sortieren((a, b) => a.Preiswert - B.Preiswert);

7. Erstellt eine Excel-Datei und fügt Daten hinzu.

  • Initialisiert eine neue Excel-Arbeitsmappe und ein neues Arbeitsblatt:
1
Eigenschaften.sortieren((a, b) => a.Preiswert - B.Preiswert);
  • Definiert Spaltenüberschriften und -breiten für die Excel-Datei:
1
2
3
4
5
6
7
Blatt.Spalten = [
{ Kopfzeile: 'Preis', Haupt: 'Preis', Breite: 15 },
{ Kopfzeile: 'Betten', Haupt: 'Betten', Breite: 10 },
{ Kopfzeile: 'Bad', Haupt: 'Bad', Breite: 10 },
{ Kopfzeile: 'Quadratfuß', Haupt: 'sqft', Breite: 12 },
{ Kopfzeile: 'Adresse', Haupt: 'Adresse1', Breite: 30 },
];
  • Fügt jedes Eigenschaftsobjekt als neue Zeile hinzu:
1
Eigenschaften.für jeden((p) => Blatt.Zeile hinzufügen(P));

8. Datei mit Zeitstempel speichern

  • Formatiert den aktuellen Zeitstempel.
  • Speichert die Datei unter einem eindeutigen Namen.
1
2
3
4
const Zeitstempel = neu Datum().toISOString().ersetzen(/[:.]/G, '-');
const Dateipfad = `estately_property_data_${timestamp}.xlsx`;

– warten auf Sie! Arbeitsmappe.XLSX.Datei schreiben(Dateipfad);

9. Erfolgs- und Fehlerprotokollierung

  • Erfolgsmeldung:
1
trösten.Log(✅ Ausgelesen und gespeichert ${properties.length} Eigenschaften zu ${filePath}`);
  • Protokolliert alle Fehler, falls das Scraping fehlschlägt:
1
2
3
Fang (Fehler) {
trösten.Fehler(`❌ Scraping fehlgeschlagen: ${Fehlernachricht}`);
}

Fazit

Das Sammeln von Immobiliendaten muss nicht mühsam sein. Mit einer Kombination aus Crawlbase Mit Cheerio und ExcelJS erhalten Sie einen einfachen, skalierbaren Workflow, der einfach funktioniert.

Statt sich gegen CAPTCHAs und Sperren verteidigen zu müssen, sollten Sie in der Lage sein, das zu entwickeln, was Sie wollen: wertorientierte Tools, intelligente Dashboards oder auch einfache Berichte.

Wenn Sie nach einer Möglichkeit suchen, Daten zuverlässig von komplexen, geschützten Websites zu extrahieren, Crawlbase ist das einzige Web-Scraping-Tool, das Sie jemals brauchen werden.