ImmobilienScout24 Mining 2.0: Der Web Scraper für Häuserdaten!

Nachdem du diesen Beitrag gelesen hast, kannst du in wenigen Stunden mit einem selbst gebauten Web Scraper Daten von über 60.000 momentan zum Verkauf stehenden Häusern von Immobilienscout24.de herunter laden. Finde raus, wie es geht!

Worum es geht

In dieser Beitragsreihe habe ich dir ja schon gezeigt, wie du mit Python Daten von Wohnungen herunterladen kannst, welche neu auf Immobilienscout24 angeboten werden. Nachdem wir die Daten geschürft, analysiert, visualisiert und mit ihnen Machine-Learning-Modelle gebaut haben, ist es nun an der Zeit, sich einer anderen Art von Immobilie zu widmen.

Der Web Scraper

Eine Detailerklärung zum alten Scraper findest du hier. Beim jetzigen Skript werde ich eher darauf eingehen, was es von dem alten Skript unterscheidet. Unten siehst du den kompletten Code für den neuen Web Scraper. Klicke im Code-Fenster oben rechts einfach auf das “+”, damit der Code sich in einem neuen Fenster öffnet. So kannst du das Skript besser lesen. Voraussetzung für die fehlerfreie Ausführung des Codes sind die Module, welche gleich zu Beginn des Skripts importiert werden. In der Python-Distribution Anaconda (beliebt bei Data Scientists) sind je nach Version die meisten der benötigten Packages schon enthalten.

import bs4 as bs
import urllib.request
import time
from datetime import datetime
import pandas as pd
import json

for seite in range(1,3000):
    
    print("Loop " + str(seite) + " startet.")

    df = pd.DataFrame()
    l=[]

    try:
        
        soup = bs.BeautifulSoup(urllib.request.urlopen("https://www.immobilienscout24.de/Suche/S-2/P-"+str(seite)+"/Haus-Kauf").read(),'lxml')
        print("Aktuelle Seite: "+"https://www.immobilienscout24.de/Suche/S-2/P-"+str(seite)+"/Haus-Kauf")
        for paragraph in soup.find_all("a"):

            if r"/expose/" in str(paragraph.get("href")):
                l.append(paragraph.get("href").split("#")[0])

            l = list(set(l))

        for item in l:

            try:

                soup = bs.BeautifulSoup(urllib.request.urlopen('https://www.immobilienscout24.de'+item).read(),'lxml')

                data = pd.DataFrame(json.loads(str(soup.find_all("script")).split("keyValues = ")[1].split("}")[0]+str("}")),index=[str(datetime.now())])

                data["URL"] = str(item)

                beschreibung = []

                for i in soup.find_all("pre"):
                    beschreibung.append(i.text)

                data["beschreibung"] = str(beschreibung)

                df = df.append(data)

            except Exception as e: 
                print(str(datetime.now())+": " + str(e))
                l = list(filter(lambda x: x != item, l))
                print("ID " + str(item) + " entfernt.")
        print("Exportiert CSV")
        df.to_csv(".../rohdaten/"+str(datetime.now())[:19].replace(":","").replace(".","")+".csv",sep=";",decimal=",",encoding = "utf-8",index_label="timestamp")     

        print("Loop " + str(seite) + " endet.\n")
        
    except Exception as e: 
        print(str(datetime.now())+": " + str(e))

print("FERTIG!")

Der Web Scraper, welchen du oben siehst, ist dem alten Skript sehr ähnlich, jedoch nicht identisch. Der erste Unterschied besteht darin, dass das Programm keine Daten von Wohnungen, sondern von Häusern herunter lädt. Dazu müssen wir einfach die URL ändern, auf die zugegriffen wird.

URL für Mietwohnungen:

https://www.immobilienscout24.de/Suche/S-2/Wohnung-Miete

URL für den Hauskauf:

https://www.immobilienscout24.de/Suche/S-T/Haus-Kauf

Außerdem greift das Skript nicht immer wieder auf dieselbe Seite zu und schaut dort nach neuen Angeboten. Viel mehr startet es auf der ersten Seite mit den neusten Angeboten und gräbt sich von da aus Seite für Seite bis zu den ältesten Angeboten durch. Dadurch muss das Programm nicht mehrere Tage oder Wochen laufen, um einen signifikanten Datensatz zu sammeln. Auf meinem Rechner hat es genau 10 Stunden und 26 Minuten gedauert, bis der Web Scraper 3.000 Seiten durchsucht und damit Daten von 61.225 Häusern herunter geladen hat. Beim Festlegen der maximalen Seitenzahl solltest du vorher untersuchen, wie viele Ergebnisseiten es auf ImmobilienScout24 zu dem Zeitpunkt gibt, zu dem du den Web Scraper laufen lässt. Bei mir waren es etwas über 3.000. Die maximale Seitenzahl kannst du dann im Code in der allerersten Klammer angeben, dann durchsucht das Programm alle existierenden Ergebnisseiten. Solltest du eine zu hohe Zahl eingeben, wird das Skript dir zwar irgendwann einen Fehler ausgeben, bis dahin werden aber schon alle Daten, die du haben willst, auf deiner Festplatte gespeichert sein.

Rohdaten zusammenführen

Der Web Scraper legt alle Daten als CSV-Dateien auf deiner Festplatte ab – eine Datei pro Seite. Um die Daten letztendlich analysieren zu können, musst du sie natürlich irgendwie miteinander verknüpfen. Und das geht so.

import os
import pandas as pd

df = pd.DataFrame()
n=0
for i in os.listdir(".../rohdaten"):
    n+=1
    df = df.append(pd.read_csv(".../rohdaten/"+str(i),sep=";",decimal=",",encoding="utf-8"))
    print("Durchgang "+str(n))

Der Code generiert einen DataFrame, iteriert über jede Datei in deinem Zielverzeichnis, lädt sie in deine Programmierumgebung und hängt sie an den DataFrame an. In diesem befinden sich nun gesammelt alle von dir herunter geladenen Häuserdaten. Lass uns jetzt den DataFrame noch auf Duplikate untersuchen.

df.shape

df = df.drop_duplicates(subset="URL")
df.shape

Ein paar der Daten waren Duplikate, diese haben wir mit den obigen Befehl entfernt.

Fazit

Mit ein paar kleinen Änderungen am ursprünglichen Skript haben wir es geschafft, auf komplette neue Daten zuzugreifen und noch schneller noch mehr Daten herunter zu laden. Wie die Daten aussehen, was es für Korrationen gibt und ob man mit einem statistischen Modell den Kaufpreis prognostizieren kann, erfährst du in den kommenden Beiträgen. Viel Spaß beim Scrapen!

 

40 Gedanken zu „ImmobilienScout24 Mining 2.0: Der Web Scraper für Häuserdaten!

  • 19. Juni 2018 um 14:31
    Permalink

    Hall Chris,
    besten Dank für die perfekte Anleitung zur Datengewinnung auf immoscout. Für mich als Einsteiger in Python und R ist dies einfach nur TOP. Vielen Dank! Ich beschäftige mich auch mit verschiedenen Immobilienbewertungsverfahren. Mich würde interessieren, ob es möglich ist die Angebotsverweildauer des jeweiligen Angebots zu messen und eventuelle Preisveränderungen zu messen. Für ertragsorientierte Bewertungsmethoden wäre das absolut klasse. Ich habe gerade ein Studium der Immobilienbewirtschaftung begonnen und die Frage der Angebotsverweildauer und der Preisentwicklung von Angebotspreisen wird gerade heiß diskutiert. Hieraus könnten bei ertragsorientierten Bewertungsmethoden (Discounted Cashflow Methode) bessere Aussagen zur Mietausfallwagnis getroffen werden. Ich denke auch, dass dies bei deinem hedonischen Modell integrierbar ist. Da bin ich aber noch am grübeln. Zumindest konnte ich im Zuge meines Studiums dies mit einigen Statistikern für große Immobilienunternehmen besprechen und die waren begeistert von der Idee. Gibt es hierfür Möglichkeiten oder würde das den Rahmen sprengen?
    Beste Grüße
    Thomas

    Antwort
    • 19. Juni 2018 um 20:27
      Permalink

      Hi Thomas,

      herzlichen Dank für dein Feedback! Es freut mich, dass dir der Beitrag weiter hilft. 🙂

      Zu deiner Frage: Du kannst den Scraper natürlich wochenlang jeden Tag laufen lassen. Wenn du fertig bist mit dem Datensammeln, dann siehst du an den Zeitstempeln, wann eine URL zum ersten Mal und zum letzten Mal vom Scraper gefunden wurde. Der Nachteil daran ist, dass du nur für Häuser, die während dieser Zeit neu erschienen und dann wieder offline gegangen sind, die genaue Angebotsverweilsdauer berechnen kannst. Für alle anderen Häuser hast du dann nur eine “Mindestverweildauer”. Es kann also sein, dass du das Programm über einen langen Zeitraum laufen lassen musst, um eine repräsentative und genaue Stichprobe zu bekommen. Außerdem wirst du sehr sehr viele Duplikate haben. Das sollte der Sache aber keinen Abbruch tun.

      In den nächsten Beiträgen werde ich mit verschiedenen Machine Learning Algorithmen versuchen, anhand der Eigenschaften der Häuser ihren jeweiligen Kaufpreis zu schätzen. Weil du an Immobilienbewertungsverfahren interessiert bist, könnte das auch für dich interessant sein. Du sagst, dass du noch Python-Einsteiger bist. Willst du die Daten auch mit Python untersuchen?

      Viele Grüße

      Chris

      Antwort
  • 25. Oktober 2018 um 17:59
    Permalink

    Vielen Dank für den tollen Beitrag Chris. Die Daten, die man von Immobilienseiten gewinnt, ermöglichen eine Menge von spannende Analyse bzw Visualisierung.

    Hast du Erfahrung damit, ob immobilienscout24 die request blockiert wenn man in einer kurzen Zeit zu oft die requests hinschickt? 3000 Seiten hast du für 10 Std gebraucht, was gleich eine Geschwindigkeit von 5 Seiten pro Minute, was die Seite akzeptiert.

    Antwort
    • 2. November 2018 um 14:07
      Permalink

      Hi Vinh,

      Bis jetzt wurde ich noch nie blockiert, allerings habe ich auch noch nie mehr Requests geschickt als von dir beschrieben. Würde mich aber auch interessieren, was bei zu vielen Anfragen pro Minute passiert. Wenn du es ausprobierst, lass es mich gerne wissen!

      Viele Grüße

      Chris

      Antwort
  • 8. Januar 2019 um 10:22
    Permalink

    Hallo Chris,

    mich würde interessieren, ob sich die Suchergebnisse (ggfs. nur die ersten Seiten) unterscheiden, wenn man anonymer User, einfach eingeloggt oder Premium-User ist. D.h. ob ImmoS diskriminiert und verschiedenen Personen verschiedene Anzeigen zeigt.
    Dazu müsste man deinen Scraper vermutlich etwas anpassen, sodass er zum einen gezielter Suchen und das er sich eine gültige Login-Session besorgen kann.

    Planst du deinen Code oder die gesammelten irgendwie zu Verfügung zu stellen (siehe SpiegelMining: http://www.dkriesel.com/spiegelmining)? Wäre cool.

    Gruß,
    Lukas

    Antwort
    • 10. Januar 2019 um 21:11
      Permalink

      Hi Lukas,

      der Code steht oben im Beitrag, oder was meinst du? 🙂
      Sicherlich könntest du den Code mit Selenium so ergänzen, dass du auch als eingeloggter Nutzer die Immobilien scrapen kannst. Wenn du allerdings nur die ersten paar Seiten vergleichen willst, ginge das manuell wahrscheinlich schneller als dafür extra ein Stück Code zu bauen. Übrigens bin ich durch Daniel Kriesels Video zu Spiegelmining erst auf die Idee gekommen, selbst diverse Scraper zu bauen. 🙂

      Viele Grüße
      Chris

      Antwort
  • 16. Februar 2019 um 16:56
    Permalink

    Hallo,
    Tolle Idee und ich versuche da auch gerade etwas tiefer einzutauschen.

    Schon mal überlegt per REST auf Immobilenscout zuzugreifen.
    Das sollte die Verarbeitung der Daten doch erleichtern.

    Antwort
    • 22. Februar 2019 um 19:42
      Permalink

      Hi Markus,

      das habe ich zuerst auch überlegt, wollte mich aber eher im Scrapen weiterbilden. Mit der API zu arbeiten, ist natürlich auch sehr elegant. 🙂

      Antwort
      • 20. Mai 2019 um 18:07
        Permalink

        Die API erhält man von IS24 nur für einen Zeitraum von 6 Wochen freigeschaltet. Schön an Deiner Lösung ist, dass man diese bestimmt auf immonet und immowelt ausrollen kann.

        Antwort
  • 20. Mai 2019 um 17:47
    Permalink

    Hallo Chris,

    Erstmal danke für diesen ausführlichen Beitrag.
    Bei mir taucht immer die Fehlermeldung auf:
    “2019-05-20 17:45:21.215000: [Errno 2] No such file or directory: ‘…/rohdaten/2019-05-20 174521.csv'”

    Hast du eine Idee was das Problem sein könnte?

    Antwort
    • 5. Juli 2019 um 09:45
      Permalink

      Hi Malik,

      du musst natürlich einen existierenden Pfad angeben. Zum Beispiel “C:/immobilienscout/rohdaten/”.

      Habe den Scraper gerade noch mal probiert (kann ja immer sein, dass Immoscout was an ihre Struktur ändern) und bei mir funktioniert er immer noch. 🙂

      Ich hoffe, das hilft dir.

      Viele Grüße

      Chris

      Antwort
  • 25. Mai 2019 um 12:28
    Permalink

    Hallo,

    ich habe alle notwendigen Module importiert und den Coe exakt kopiert und eingefügt. Leider zeigt mir das Terminal beim Ausführen einen Fehler in Zeile 43 “df = df.append(data)” mit dem Hinweis “Syntax error: Invalid Syntax”. Woran liegt das? Ich wollte den Scrapper auf meinem iMac nutzen – liegt hierbei vielleicht irgendwo der Fehler?

    Viele Grüße
    Marcel

    Antwort
    • 5. Juli 2019 um 09:47
      Permalink

      Hi Marcel,

      ich habe den Code gerade noch mal laufen lassen und er funktioniert noch. Das einzige, was mir spontan einfällt, ist, dass der Code durch das Kopieren bei die vielleicht falsch eingerückt sein könnte. Einrückungen sind bei Python essentiell.

      Viele Grüße

      Chris

      Antwort
  • 3. Juli 2019 um 10:25
    Permalink

    Hallo Chris,

    danke für den tollen Code und die hilfreichen Erklärung dazu. Ich hatte schon länger selbst überlegt, ob ich nicht einen Websraper bauen kann, um immer mal wieder nach interessanten Häusern in der Umgebung zu schauen. Ich habe eigentlich “Null”-Ahnung von HTML und habe davor zurückgeschreckt, wie ich die relevanten Daten finden kann, aber Dank der schrittweisen Erklärung konnte ich das super anpassen.

    Ein paar Änderungen in der Such-URL (Ort, Preis, m², Zimmer) und schon läuft es. Habe dazu noch die Anzahl der Ergebnisse vorab ausgelesen, um dann die Schleifendurchläufe dynamisch auf die Anzahl der Seiten zu begrenzen.

    Jetzt muss ich mal schauen, ob ich das für immonet und immowelt auch in der Form hinbekomme.

    Viele Grüße
    Henning

    Antwort
    • 5. Juli 2019 um 09:48
      Permalink

      Hi Henning,

      super! Freut mich, dass dir der Scraper hilft!

      Viele Grüße
      Chris

      Antwort
  • 10. August 2019 um 02:10
    Permalink

    Wie witzig. Genau dasselbe habe ich auch programmiert – nur gehe ich eben über die REST API.

    Meine Frage ist eher: Wie sieht es rechtlich aus ? Ich habe mehr oder weniger aus Interesse und um Immobilien Preise vergleichbar zu machen ein paar tausend Einträge “gescrapt”. Aber nun Frage ich mich, welche rechtlichen Hindernisse ggbf. aufkommen können.

    Antwort
    • 15. August 2019 um 16:56
      Permalink

      Hi Chris,

      gute Frage.

      Die Urteile, die ich bis jetzt gesehen habe, lassen Web Scraping zu.

      Siehe hier und hier.

      Viele Grüße
      Chris

      Antwort
  • 17. November 2019 um 02:05
    Permalink

    Hallo Chris,
    vielen Dank erstmal für deinen umfangreichen Blog!

    Bei mir ist der Scraper erfolgreich gelaufen, doch seit ein paar Tagen bekomme ich keine Ergebnisse mehr. Weisst du zufällig etwas darüber?

    danke und viele Grüsse
    Marco

    Antwort
    • 12. Dezember 2019 um 12:35
      Permalink

      Hi Marco,

      hast du das Problem immer noch? Hab den Scraper gerade noch mal laufen gehabt und bekomme wie gehabt alle Daten.

      Viele Grüße
      Chris

      Antwort
  • 26. Februar 2020 um 01:04
    Permalink

    Hallo Chris,

    lieben Dank für den super Code. Ich hätte noch zwei Fragen und würde mich über eine Antwort freuen.

    Mir ist aufgefallen, dass die Inserate eine unterschiedliche Spaltenanzahl beim Download der csv Dateien aufweisen. Manche Inserate haben mehr Spalten als andere Inserate.

    Beispiel: Die csv-Datei 1 (Seite 1) hat 20 Spalten. Die csv.Datei 2 (Seite 2) hat 22 Spalten.

    Frage 1: Würde man es theoretisch hinkriegen, dass sich der Scraper nur 10 definierte Kriterien (Preis, Fläche etc.) ziehen würde?

    Frage 2: Könnte man das Skript auch so schreiben, dass man direkt nur 1 csv Datei rausbekommt?

    Beste Grüße

    Antwort
    • 17. April 2020 um 07:59
      Permalink

      Hi Bernd,

      danke dir und danke für die Anmerkung. Normalerweise benutzen wir im Deutschen ja Latin-1 als Encoding. Ich weiß nur nicht mehr, ob mit diesem Encoding nicht irgendwas beim Export schief gelaufen ist. Aber das mit utf-8-sig ist echt ein guter Hinweis.

      Viele Grüße
      Chris

      Antwort
  • 10. April 2020 um 23:17
    Permalink

    Hi Chris,
    großartig – danke fürs Teilen!
    Ich habe eine ergänzende Frage zum Scraper: wie schaffe ich es zusätzlich noch die Information “exposeOnlineSince” je Inserat auszulesen und im csv als weitere Spalte zu ergänzen? Hier scheitere ich bisher leider…
    Es wäre super, wenn du Zeit findest für eine kurze Antwort!

    Herzlichen Dank und schöne Ostern!

    Antwort
    • 17. April 2020 um 07:54
      Permalink

      Hi Jörg,

      ich wusste gar nicht, dass es diese Info gibt. Ich habe sie immer vergeblich gesucht.
      Kann es sein, dass die neu ist? Ich schaue mal, wie man das noch mit den Code bekommt.
      Falls ich das vergessen sollte, erinnere mich gern bei Facebook (StatisQuo) noch mal dran. 🙂

      Viele Grüße

      Chris

      Antwort
    • 17. April 2020 um 08:52
      Permalink

      Ich sehe gerade, dass es seit einer Weile im Quellcode das Dictionary “IS24.premiumStatsWidget = { … }” gibt. Im Prinzip könntest du das mit derselben Methode wie im Code auslesen. Im Code liest du ja in Zeile 32 das Dictionary “keyValues = {…}” aus. Ich will jetzt aber keine detaillierte Anleitung geben, weil man auf ImmobilienScout24 für diese Daten eigentlich eine Plus-Mitgliedschaft haben muss…

      Antwort
  • 5. Juni 2020 um 10:01
    Permalink

    Hi Chris,

    erstmal vielen Dank, dass du dein Projekt mit uns teilst. Ich habe ein Problem, dass sich der Output der einzelnen CSV’s in der Anzahl der Spalten unterscheidet. Somit habe ich ein Problem wenn ich die CSV’s zusammenführe. Mache ich etwas falsch?

    Vielen Dank und beste Grüße
    Jörg

    Antwort
    • 9. Juni 2020 um 13:00
      Permalink

      Hi Jörg,

      cool, dass es dir hilft! Kriegst du beim zusammenführen wirklich einen Fehler und es funktioniert nicht oder bekommst du “nur” ein Warning? eigentlich sollte eine unterschiedliche Zahl von Spalten kein Problem sein.

      Minimalbeispiel:

      import pandas as pd
      a = {"A":[1,2,3],"B":[3,4,5]}
      b = {"B":[6,7,8],"C":[9,10,11]}
      df_a = pd.DataFrame(a)
      df_b = pd.DataFrame(b)
      df = df_a.append(df_b)

      Output:

      append df

      Antwort
      • 15. Juni 2020 um 12:44
        Permalink

        Hallo Chris,

        nachdem ich vom Mac auf Windows umgestiegen habe hats geklappt. Vielen Dank. Eine Anregung hätte ich evtl. noch für dich. Hast du schon mal mit MS PowerBI gearbeitet. In dem Programm werte ich die gesammelten Daten für meine Bedürfnisse aus. Es ist kostenlos und viele Filter kann man per Drag&Drop einstellen, ändern und erweitern. Wenn du Interesse hast, dann kann ich dir gerne das Programm vorstellen (PS: Nein ich mache keine Werbung. Wollte dir für deine Veröffentlichung danken.)

        Beste Grüße
        Jörg

        Antwort
  • 5. August 2020 um 00:46
    Permalink

    Hi Chris,

    leider bekomme ich den Fehler 403 und meine Abfrage wird damit blockiert.
    Hast du einen Workaround?

    Ich habe bisher keinen gefunden.

    Viele Grüße
    Dom

    Antwort
    • 7. August 2020 um 17:59
      Permalink

      Hi Dom,

      habe den Code gerade laufen lassen und bekomme 405er. Ärgerlich… vielleicht blockiert Immoscout jetzt Scraper. Eine Alternative wäre ein Browsersimulator wie Selenium, bei dem es auch eine Python-Implementation gibt. Ist ein bisschen aufwendig. Aber ein anderer Workaround fällt mir gerade nicht ein, sollte Immoscout wirklich langfristig Scraper blockieren.

      Viele Grüße
      Chris

      Antwort
      • 8. August 2020 um 01:16
        Permalink

        405er leider auch hier. Eine Lösung ist wie von Chris schon beschrieben der Umstieg auf Selenium. Leider aber aufwendiger.
        Viele Grüße
        Michael.

        Antwort
        • 10. August 2020 um 12:12
          Permalink

          ImmoScout hat auch eine API, die man nutzen kann (schon wieder voll vergessen…). Das wäre natürlich die elegantere Alternative zu einer Browsersimulation. Da wurde jetzt eine neue Version ausgerollt, vielleicht haben sie sich im Zuge dessen auch dazu entschieden, Scraper zu blockieren. Habt ihr Bock auf ein Tutorial zur der API? Die müsste ich mir selbst auch erst mal anschauen…

          Antwort
          • 25. August 2020 um 15:08
            Permalink

            Einen genaueren Blick auf die API fände ich großartig.

          • 3. September 2020 um 20:49
            Permalink

            Ja, bitte!!! Das wäre stark, danke!

  • 10. August 2020 um 11:35
    Permalink

    Hallo Chris,

    habe deinen tollen “scraper” bis vergangene Woche auch immer erfolgreich anwenden können.
    Leider bekomme ich jetzt auch den “HTTP Error 405”. Es sieht wirklich danach aus, als würde ImmoScout den Zugriff blockieren.
    Es ist sehr ärgerlich, da ich gerade mit den Daten den evtl. Einfluss der Covid 19-Pandemie auf den Immobilienmarkt untersuche.

    Viele Grüße und bleib gesund.
    Klaus

    Antwort
    • 10. August 2020 um 12:13
      Permalink

      Hi Klaus,

      siehe mein obiger Kommentar. Das wäre eine Alternative. 🙂

      Viele Grüße
      Chris

      Antwort
      • 14. August 2020 um 14:10
        Permalink

        Hi Chris,

        Selenium funktioniert auch nicht mehr/wird erkannt und die API erlaubt meines Wissens keinen allgemeinen Export von Daten.

        Viele Grüße
        Hans

        Antwort
  • 3. September 2020 um 20:48
    Permalink

    Ja, bitte!!! Das wäre stark, danke!

    Antwort
  • 23. September 2020 um 18:54
    Permalink

    Hi Chris,

    gibt im Rahmen der “Qualitätsoffensive” von ImmoScout nun auch einen no captcha recaptcha Test, damit sollte es sich ausgescrapt haben, oder?

    Bezüglich der API hatte ich auch schon überlegt, allerdings scheint man für den Zugriff eine existierende Website, mit einem Mehrwert für IS24 haben zu müssen. Würde mich interessieren wie streng IS24 diesbezüglich ist.

    Antwort
  • Pingback: Web-scrape and geocode rental data – Schernthanner

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.