Für das Seminar “DataScience: Regieren durch Daten, Hacking Society?” haben wir uns mit dem Beschaffen, Verarbeiten und Visualisieren von offenen Daten beschäftigt. Als “offen” haben wir dabei sämtliche Daten interpretiert, die öffentlich zugänglich sind. Sprich auch sämtliche Daten auf öffentlich zugänglichen Websites – für unsere Anwendung die Daten von der führenden WG-Vermittlungs Website.

Vorüberlegungen

Das Ziel unseres Projekts war die Abbildung der aktuellen Wohngemeinschafts-Situation in Berlin mittel einer interaktiven Karte. Durch mehrere Filteroptionen sollte eine Auswertung der Bestandsdaten ermöglicht werden, die so bisher nicht möglich war. Welche Bezirke sind für Studenten-WGs wirklich angesagt? Lassen sich für französisch- oder spanischsprachige WGs Ballungsräume ausmachen? Die dafür notwendigen Information sind im Grunde für jeden über WG-Vermittlungs Websites zugänglich. Aber darf man sie auch verwenden?

Rechtliches

Während der Recherche zum rechtlichen Hintergrund der Datenbeschaffung wie wir sie einsetzen wollten, sind wir über einen Artikel des Rechtsanwalts Dr. Hans-Georg Riegger gestoßen. Dort wird ein Urteil des Bundesgerichtshofs erwähnt, aus welchem hervorgeht, dass eine unlautere Wettberwerbsbehinderung nur dann gegeben ist, wenn zum Scraping der Website technische Schutzvorrichtungen überwunden werden müssen (die ganze Story gibt’s hier zu lesen: http://www.fgvw.de/2334-0-BGH+zum+Screen-Scraping.html). Wenn sich die zu scrapende Website also nicht gegen Scraping schützt, dürfen die Daten auch verwendet werden. Das gilt insbesondere für unser Projekt, da wir eine nichtkommerzielle Nutzung anstreben.

Scraping

Das Abgreifen der Daten von der WG-Vermittlungs Website gestaltete sich dann auch tatsächlich recht einfach – es waren keine technischen Schutzmaßnahmen getroffen worden. Ein kurzes Skript in Python unter der Verwendung der pyQuery-Library, welche ein jQuery-artiges Arbeiten auf Website-Repräsentationen ermöglicht, hat bereits fast genügt. Da die Website allerdings mit Session-Cookies arbeitet, musste zusätzlich die requests-Library angewendet werden.

Der Scraper selbst funktioniert nach einem einfachen Prinzip:
– Sammeln aller relevanten Links (in unserem Fall Links zu den enstprechenden Anzeigen)
– Anfertigen einer lokalen Kopie der Anzeige (kommt einem Seitenaufruf gleich)
– Auslesen der entsprechenden Felder aus der lokalen Kopie (via pyQuery)
– Sammeln und exportieren der Daten (z.B. als CSV-Datei)

Für den Websiten-Betreiber sieht das Scrapen also im Grunde aus wie ein eifriger Nutzer, der eine Anzeige nach der anderen aufruft. Auch wenn das grundsätzlich kein völlig absurdes Verhalten ist, so könnte man nach einigen hundert Aufrufen natürlich argwöhnisch werden. Die von uns gescrapte Website hat uns allerdings gewähren lassen (vorerst, wie sich später zeigen wird), bis wir rund 5000 Anzeigen gesammelt hatten.

Datenverarbeitung

Sind die Daten erst einmal gesammelt, ist die Verarbeitung ein gleichsam unkomplizierter Prozess: es wurde eine SQL-Datenbank aufgesetzt, die Daten aus dem CSV in diese Datenbank importiert und um fehlerhafte Einträge bereingt.

WebApp Visualisierung

Ziel der Visualisierung ist es dem Nutzer eine Karte anzuzeigen, auf der dieser Einsichten über die Verteilung von berliner WGs, für die von ihm festgelegte Filterkriterien gelten, bekommt. Hierzu haben wir eine Google Heatmaps API genutzt, die auf Google Maps aufsetzt und online frei zur Verfügung steht. Die Heatmap wurde gewählt, um auch bei räumlich eng zusammen liegenden Wohnungen (bzw. bei Wohngemeinschaften, die sich an der exakt gleichen Adresse befinden) klar zu machen, dass dort für die festgelegten Filterkriterien mehrere Treffer gefunden wurden.
Zum Zwecke der Visualisierung mussten, da wir schließlich einzelne WGs auf der Karte darstellen wollten, vorerst die zu den in den Anzeigen angegebenen Adressdaten passenden Geo-Koordinaten ermittelt werden. Einer der ersten Schritte der Datenaufbereitung war daher nach dem Bereinigen der Datensätze von Unsinnigen Adressdaten (die aufgrund von nicht gerade restriktivem validieren der Nutzereingaben auf Seiten des WG-Vermittlungsportals zahlreich vorhanden waren) das Sammeln dieser Geo-Koordinaten. Hierzu wurde Google’s Geolocation Webservice über einen längeren Zeitraum hinweg von uns mit Anfragen “bombadiert”, da dieser nur eine begrenzte Anzahl an Zugriffen pro Tag und pro IP erlaubt, die von der Anzahl der WGs in unserer Datenbank bei weitem übertroffen wurde, es jedoch im Netz der TU-Berlin den praktischen Vorteil gibt, öfters mal eine neue IP zugewiesen zu bekommen ;).
Mit den passenden Geo-Koordinaten zu den Anzeigen in unserer Datenbank wurde dann mit der Java Servlet API eine typische Webanwendung realisiert, die im frontend mittels Javascript, HTML und CSS mit dem Nutzer kommuniziert und im Backend über JDBC den Zugriff auf unsere MySQL Datenbank ermöglicht.

Mietpreis Verteilungen

Neben der Visualisierung in Form einer interaktiven Website, haben wir die Daten in Form von Histogrammen aufbereitet, um einen Überblick ueber die aktuellen Mietpreise von WG-Zimmern zu bekommen.
Als ersten Schritt haben wir alle Inserate deren Preis geringer als 100eur sind gelöscht.
Viele dieser Zimmer wurden mit 0eur Mietpreis inseriert oder auch auch mit einer wöchentlichen Miete (vermutlich Ferienwohnungen).

fig2  Fig. 1: Histogramme Mietpreise

Die durchschnittliche Miete betraegt 367eur, die Medianmiete 353eur.
Der Median ist ein hier ein besseres Maß um ein Überblick ueber die Preise zu bekommen, da es robuster gegenueber Ausreißern ist – Die Daten beinhalteten mehrere Angebote mit Preisen über 1000eur.
Vermutlich wurden hier ganze Wohnungen inseriert.
Der durchschnittliche Preis pro Quadratmeter beträgt 19.38eur, der Median Preis 18.50eur.
Die Durchschnittsgröße ist 20.61qm, die Mediangröße 20qm.
Die Histogramme zeigen, dass sich ein Großteil der Wahrscheinlichkeitsmasse zwischen 15eur/qm und 25eur/qm befindet.
Die Verteilung flacht nach rechts langsamer ab und ist endlastig (engl. long tailed distribution).

 

fig4  Fig. 2: Histogramme Absolute Preise nach Größe

fig5  Fig. 3: Histogramme qm-Preise nach Größe

Auffällig hier ist, dass kleinere Zimmer wesentlich teurer sind als Große.

Die Wahrscheinlichkeitsmasse verteilt sich bei den kleineren Zimmern über einen wesentlich größeren Raum, sehr kleine Zimmer sind scheinbar auch sehr teuer, größere Zimmer sind tendenziell günstiger.

fig3  Fig. 4: Histogramm Zimmergröße

fig6  Fig. 5: Bewohneralter

 

Nachspiel

Da unsere Implementierung sich nicht automatisch mit den Daten der WG-Vermittlungs Website synchronisiert, wollten wir ca. 1 Monat nach dem initialen Scrapen unsere Datenbank mit neuen Anzeigen auffrischen. Doch schon der erste Aufruf des Scrapers ging ins Leere. Was war passiert?

Die Website-Betreiber sind in der Zwischenzeit auf unseren Scraper aufmerksam geworden und haben bei häufigem Seitenzugriff einen Disclaimer mit Captcha vorgeschaltet. Der Disclaimer weißt dabei auf besondere Aspekte der AGBs sowie einige allgemeine Hinweise zum Umgang mit copyright-geschützem Material und der kommerziellen Nutzung ihrer Daten hin. Durch das Eingeben des Captchas stimmt der Nutzer den Paragraphen des Disclaimers zu – unterm Strich eine technische Schutzmaßnahme gegen Scrapen der Daten.

Laut unserer Recherche zu den rechtlichen Aspekten des Scrapens zählen die Daten des WG-Vermittlungsdienstes nun nicht mehr als öffentlich zugänglich bzw. “offen”. Eine Aktualisierung unseres Datenbestandes ist also leider vorerst ausgeschlossen.

Kontakt

Eine freundliche E-Mail an den Betreiber der Website in der wir darauf aufmerksam machten, dass wir als nichtkommerzielles Studenten-Projekt mit den gescrapten Daten nichts böses vor haben, hat dann aber zu einer erfreulichen Antwort geführt:

“Vielen Dank für Ihre E-Mail und Ihre damit verbundene Anfrage. Uns liegt sehr viel am Vertrauen und der Zufriedenheit unserer Nutzer, daher sind wir über jeden Hinweis dankbar. Gerne teilen wir Ihnen mit, dass Sie selbstverständlich alle Daten, die öffentlich zugänglich sind, auswerten [sic]. Gerne können Sie uns weitere Informationen über ihre Auswertung bzw. Ihrem Projekt zu kommen lassen. Des Weiteren sind wir auch am Endprodukt und dessen Auswertung sehr interessiert.”

Die Gespräche laufen…

Hier der Link zu der Anwendung: http://www.stipendo.de:8080/wgstuff/

Tobias P., Tobias B., Jan-Eike G.

2 thoughts on “WG-gesucht Crawl

    1. Hi Dima,

      as explained in the answer on SO, the WG-Gesucht website uses cookies to keep track of the navigation – which needs to be handled by the crawler(s).

      Regards
      Tobias

Schreibe einen Kommentar

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

*