Corona-Tracker mit urlwatch

Die Kreisverwaltung hier im Landkreis Dahme-Spreewald veröffentlicht täglich Zahlen zur aktuellen COVID-19-Pandemie.

Leider hat man es dort bis heute nicht geschafft, historische Daten zur Verfügung zu stellen – wer sich also einfach nur den zeitlichen Verlauf der Neuinfektionen anschauen möchte kommt hier nicht weiter.

Und über die Darstellungsform (Accessibility!) der Informationen in der „Infografik“ oben reden wir an dieser Stelle erstmal noch nicht:

„Infografik”

Weiter unten gibt es eine HTML-Tabelle mit den täglichen Key Facts zum COVID-19-Status im Landkreis:

HTML-Tabelle mit den täglichen Key Facts zu COVID-19 im Landkreis.

Da ich gerne wissen möchte, wie die Pandemie hier regional verläuft, habe ich angefangen, die Werte der Tabelle in einem Spreadsheet zu notieren. Manuelle Datensammlung ist aufwändig und fehleranfällig, so habe ich anfangs hier und da mal einen Tag vergessen.

Der naheliegende, nächste Schritt ist dann ein automatischer Abruf der Daten. Hierzu habe ich folgende Anforderungen notiert:

  • regelmäßiger Abruf der Info-Seite
  • Extraktion der Werte aus der HTML-Tabelle
  • Vergleich der Werte mit dem vorherigen Abruf, Änderungen in diesem Fall dokumentieren
Eine kurze Recherche brachte mich zum Tool urlwatch. Dieses erledigt jeden einzelnen Punkt meiner Anforderungsliste ohne weitere Anpassungen.

urlwatch ist in Python geschrieben und kommt mit vielen Plugins, u. A. um einen DOM-Node zu extrahieren (brauchte ich), HTML-Markup in Plain-Text zu verwandeln (brauchte ich) und das Ergebnis bei einer Änderung abzulegen (brauchte ich).

Sobald urlwatch eine Änderung an den Werten der Tabelle bemerkt, schickt es eine E-Mail an mich – welche ich dann in das Spreadsheet übertrage (aktuell noch manuell, urlwatch kann aber die Ausgabe auch in ein Shell-Skript pipen, womit sich z. B. automatisch eine Datenbank füttern lässt oder die Infos schlicht als CSV weggeschrieben werden können).

E-Mail von urlwatch bei einer Änderung

Um dem ganzen Hassle mit dem Setup einer Python-Umgebung aus dem Weg zu gehen, habe ich mir schließlich einfach ein existierendes (aber nicht offizielles) Docker-Image genommen und dieses für mich angepasst: urlwatch wird darin nicht mehr als root ausgeführt, sondern läuft unter einem eigenen, nicht privilegierten User.

Das Image wird als Compose-Service genutzt und läuft seit einigen Wochen völlig problemlos und fehlerfrei.

Wer will schaut sich den Source hier an: urlwatch-docker.