Python scraping: Daten aus Webseiten herausziehen

Das erste Mal unterwegs mit Python – Ergebnis: Ein experimenteller Datascraper für Kinderbetreuungsangebote im Kanton Zürich.


Die Idee entstand eigentlich mehr per Zufall: Auf der Suche nach granularen Daten – und solchen, die sich mit Adressen auf eine Karte umlegen liessen – stiess ich auf den Kinderbetreuungsindex, eine Auswertung der Betreuungsangebote im Kanton Zürich (Krippen, Horte und so weiter). Von da aus gelangte ich auf lotse.zh.ch, das Portal des Amts für Jugend- und Berufsberatung, das Kontaktadressen für Eltern bereitstellt.

Der dabei entstandene Plan: der wenig hilfreichen Imagemap auf dieser Seite eine Alternative zur Seite zu stellen. Das schien mir eine gute Gelegenheit zu einer ersten, richtigen Fingerübung zu sein. Auf mehrere Webseiten verteilt finden sich hier nämlich Adresslisten von Betreuungsangeboten, die in einer gemeinsamen Kartenübersicht gut aufgehoben wären. Darum sammle ich die Adressdaten aller Zürcher Angebote und mache sie anschliessend in einer Google Map verfügbar.

Auch wenn es das alles auf Anfrage wohl sehr viel einfacher gäbe – der Übung halber versuche ich, mir die Daten selbst zu holen. Und zwar mit einem Scraper, also einem eigens zu diesem Zweck geschriebenen Programm. Ein anschauliches (Code-)Beispiel zum Prinzip gibt es übrigens in Nathan Yaus Flowing Data.

Mein Plan dabei:

  1. Kantonsweite Adresslisten aus Lotse-Seiten (Beispiel) herausziehen
  2. Angebote der Stadt Zürich von der Stadt-Homepage holen
  3. Angebote von Winterthur aus PDFs auf der städtischen Kinderbetreuungsseite extrahieren
  4. Alle Adressdaten zusammenführen und auf eine Google Map umlegen

Für die erste Etappe greife ich ungeachtet fehlender Erfahrung auf Python zurück. Das bietet eine einfache Syntax und einige Komfortfeatures, die Programmieranfängern viel Arbeit abnehmen. Vor allem hat Python eine gewisse Verbreitung bei Datenarbeitern und hält verschiedene Module bereit, die einem beim Scraping (also dem computergestützten Zusammensuchen) von Daten unter die Arme greifen. Zum Beispiel das nett benannte BeautifulSoup, das sich gerade für das Auslesen von HTML-Dokumenten gut eignet.

Das Lernen von Python geht übrigens mit den vielen verfügbaren Online-Tutorials recht einfach von der Hand. Erst im Anschluss bin ich auf Tobias Kuts sehr hübsche Sammlung von Pythonressourcen gestossen.

Hier der etwas ungelenkte Code meines ersten Python-Experiments. Dazu ist zu sagen, dass es die Website Datensammlern nicht besonders einfach macht. Die einzelnen Angaben finden sich zwar übersichtlich auf einer Seite, sind aber nicht sehr einheitlich und im HTML-Code kaum sinnvoll ausgezeichnet. Etwas Gewurstel war darum nötig, um die Einträge zu erhalten.

Die resultierenden Daten gibt es in der folgenden Tabelle oder hier: Spreadsheet Kinderbetreuung

Das Programm generiert übrigens eine CSV-Datei, die sich aber leicht zu Google hochladen lässt. Hier das Resultat als Spreadsheet:

  • Veröffentlicht in: daten

2 Kommentare Schreibe einen Kommentar

  1. Danke für den Artikel. Und zwar nicht nur wegen dem netten Backlink (freut mich, wenn die Resourcensammlung gefällt. Sollte ich eigentlich mal wieder updaten…), sondern vor allem dem praktischen Codebeispiel. Anwendungsfälle sind immer gern gesehen.

    Spontan hätte ich jetzt eigentlich auch +1 klicken wollen… nur der Button, der fehlt…

  2. Hi,

    google hat mich hierher gebracht. Ich versuche etwas ähnliches zu bewerkstelligen. Ich habe versucht deinen Code 1:1 zu kopieren und zu verwenden. Ich verwende Eclipse Mars mit PyDev. Aber dein Code läuft hier nicht. Es scheitert bereits bei der ersten Zeile import. Hast du evtl. ein paar Tips?

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.