ImmobilienScout24 Mining Tutorial: Der Web Scraper

Wie versprochen gibt es hier das Tutorial zur Artikelreihe über ImmobilienScout24 Mining. Hier erfährst du genau, wie du den Web Scraper baust, mit dem die Daten geschürft wurden.

Auchtung! Um dieses Tutorial genau nachvollziehen zu können, sind zumindest grundlegende Programmierkenntnisse wünschenswert. Den Scraper habe ich in Python geschrieben. Hier ist das komplette Skript als HTML: ImmobilienScout24 Mining

Der Scraper: Grundidee und Vorgehensweise

Bevor wir detailliert in die Beschreibung des Codes einsteigen, möchte ich kurz zusammenfassen, was der Scraper überhaupt macht.

Als erstes besucht der Scraper genau diese Seite. Sieht aus wie die normale erste Ergebnisseite ohne sonstige Suchkriterien. Das stimmt auch fast. Alle auf ImmobilienScour24 zu findenden Wohnungen in Deutschland werden vorgeschlagen. Allerdings sind die Angebote hier schon so sortiert, dass die neuesten ganz oben stehen. Wichtig! Ändert man die Art der Sortierung nämlich nicht und bleibt bei der Standardsortierung, dann sind die Wohnungen zuerst zu sehen, die eine bezahlte Premiumplatzierung haben. Mit dieser Sortierung würden wir immer wieder dieselben Daten speichern.

Nachdem der Scraper auf der Seite angelangt ist, durchsucht er den Quellcode nach URLs, die den Text “/expose/” enthalten und speichert diese in einer Liste. Die gespeicherten URLs führen nämlich zu den einzelnen Wohnungsangeboten. Insgesamt sind auf der ersten Ergebnisseite 20 Wohnungen zu sehen. Nachdem die Liste mit den URLs befüllt wurde, geht der Scraper diese Schritt für Schritt durch. In jedem Schritt besucht der Scraper eine der URLs und durchforstet auch hier den Quellcode. Die relevanten Stellen werden ausgelesen und mit diesen Daten wird eine Tabelle befüllt. Mit jeder URL wird unsere Datenbasis eine Zeile länger. Wenn die Daten aller 20 Wohnungen in der Tabelle gespeichert wurden, wird diese als  CSV-Datei in einem Ordner abgelegt.

So weit, so gut. Und dann?

Da wir nicht nur von 20 Wohnungen die Daten speichern wollen, durchläuft der Scraper eine (Endlos-)Schleife.  Nach jeden Durchlauf “schläft” der Scraper für eine gewisse Zeit, damit die Seite sich aktualisieren kann. Dann speichert er erneut die aktuellsten 20 Angebote. Je kürzer die Pause, desto weniger Wohnungen entwischen dem Programm. Damit kann jedoch auch der Prozentsatz der Duplikate größer werden. Wählt man die Schlafzeit hingegen sehr großzügig, dann sind gar keine Duplikate im Datensatz enthalten. Dafür sind einem mit Sicherheit einige Daten durch die Lappen gegangen.

Ich habe mich für eine Pause von einer Minute entschieden. Allerdings befürchte ich, dass vor allem nachts sehr viele Duplikate in den Datensatz fließen, da wahrscheinlich nur die wenigsten Makler und Privatpersonen Angebote um diese Uhrzeit posten. Nach einem 24-stündigen Testlauf betrug der Prozentsatz eindeutiger Wohnungen unter allen Angeboten nur rund 10 Prozent. Trotzdem habe ich mich dafür entschieden, die Schlafzeit des Scrapers nicht zu verlängern, da die Duplikate im endgültigen Datensatz ohne weiteres wieder gelöscht werden können. Man sollte natürlich immer den noch verfügbaren Speicherplatz im Auge behalten. Bei sehr großen Datensätzen bzw. geringem Speicherplatz kann es sich lohnen, die Zahl der Duplikate möglichst klein zu halten.

Und jetzt zum Code!

7 Gedanken zu „ImmobilienScout24 Mining Tutorial: Der Web Scraper

  • 11. Februar 2018 um 13:43
    Permalink

    Hallo,

    danke für die detaillierte Erklärung der einzelnen Codezeilen. Beim nachbauen habe ich allerdings die Orientierung verloren, welche COdezeile zu welchem Block (Try, For, etc.) gehört. Könntest Du vielleicht nochmal den kompletten Code posten, damit man sieht, wie die Einrückungen sind?

    Danke
    ein Pythonanfänger

    Antwort
    • 11. Februar 2018 um 13:49
      Permalink

      … jetzt habe ich es selbst gefunden. Sorry.

      Antwort
      • 15. Februar 2018 um 20:02
        Permalink

        Kein Ding! Hat’s funktioniert? Bei weiteren Fragen kannst du auch gern eine Mail schreiben.

        Antwort
  • 13. August 2018 um 00:26
    Permalink

    Danke für das Tutorial! Sehr gut erklärt.
    Ich möchte mit der gesamelten Data noch ein paar Rechnungen innerhalb des Skriptes einbauen.
    Wie könnte ich z.B. Python jetzt sagen “mit obj_purchasePrice und obj_livingSpace rechne mir den m² -Preis”? Leider bin ich Anfänger und komme hier nicht weiter.

    Antwort
    • 13. August 2018 um 10:20
      Permalink

      Hi Matthias,

      danke für das Feedback!

      Zu deiner Frage: Wenn du das Tutorial abgeschlossen hast, liegen ja alle Daten gesammelt in einem DataFrame vor. Mit den Spalten des DataFrames kannst du natürlich auch weitere Berechnungen durchführen. Um mit Hilfe der Merkmale “obj_purchasePrice” und “obj_livingSpace” eine neue Spalte mit dem Quadratmeterpreis zu erstellen, machst du folgendes:

      df[“qm_preis”] = df.obj_purchasePrice/df.obj_livingSpace

      oder

      df[“qm_preis”] = df[“obj_purchasePrice”]/df[“obj_livingSpace”]

      Beide Befehle äquivalent zueinander. In derselben Weise kannst du mit “*”,”+” und “-” auch Spalten miteinander multiplizieren, addieren und voneinander subtrahieren.

      Sag Bescheid, wenn’s geklappt hat! 🙂

      Antwort
  • 25. September 2018 um 08:54
    Permalink

    Hallo Cris
    ist es auch möglich nicht nur aktuelle Daten auszulesen, oder besteht die Möglichkeit auch historische
    Immobiliendaten beim Scout auszulesen.
    Finde deine Projekte extrem spannend.

    LG

    Klaus

    Antwort
    • 30. September 2018 um 11:44
      Permalink

      Hi Klaus,

      danke für dein Feedback! 🙂
      Natürlich kannst du generell nur das scrapen, was sich auch auf der Seite finden lässt. Allerdings gibt es die Möglichkeit, nicht nur immer die neuen Angebote auf der ersten Seite zu scrapen, sondern alle Angebote auszulesen, die im Moment online sind. Genau das habe ich im Beitrag zu Häusern auf ImmobilienScout24 gemacht.

      Der Web Scraper für Häuser

      Bei Fragen schreib mir gern auf meiner Facebookseite eine Nachricht. -> StatisQuo auf Facebook

      Viele Grüße

      Chris

      Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.