OpenRefine Projekt von Website erstellen

openrefinehistHub befasst sich in einer Blogserie mit der Aufbereitung und Anreicherung von Daten in OpenRefine. Alle Beiträge der Serie werden in einer Übersicht gesammelt. In diesem Beitrag zeigen wir, wie ein neues Projekt aus einer Website erstellt werden kann. Als Beispiel verwenden wir dazu die Wikipedia-Seite mit den Bevölkerungszahlen von 1939 nach Ländern.

Projekt erstellen von Clipboard

OpenRefine bietet beim Erstellen eines neues Projekts die Option «Web Addresses (URLs)». Diese eignet sich für strukturierte Daten, die bei der Wikipedia-Seite nicht so vorliegen. Deshalb erstellen wir das Projekt vom «Clipboard». In das Textfeld geben wir den Link der Website ein:

https://en.wikipedia.org/wiki/List_of_countries_by_population_in_1939

Das erstellte Projekt besteht dann aus einer einzigen Zelle mit dem Link. Aus diesem holen wir im nächsten Schritt das gesamte HTML über «Edit column – Add column by fetching URLs».

Wo sind die gesuchten Informationen im HTML

Das gesamte HTML wird nun in einer Zelle angezeigt. Um die Informationen, die wir suchen, daraus extrahieren zu können müssen wir zuerst die Seite genauer anschauen. Die Daten sind in Wikipedia in einer Tabelle untergebracht:

Um herauszufinden, wie wir an die einzelnen Tabellenzeilen kommen, können wir den Quellcode anzeigen und untersuchen. Einfacher ist das mit einem Tool wie Firebug oder Rechtsklick und «Element untersuchen». Dabei sehen wir, dass die einzelnen Zeilen jeweils von <tr> Tags umschlossen sind.

Extrahieren der Informationen aus dem HTML

Als nächstes erstellen wir also eine neue Spalte, z.B. mit dem Namen «parse», mit dem Befehl:

value.parseHtml().select("tr").slice(10, -12).join("|")

Dieser Befehl wählt alle <tr> Tags aus, schneidet die ersten 11 und die letzten 12 ab, und setzt ein «|» zwischen die <tr>. Dadurch können wir als nächstes über «Edit cells – Split multi-valued cells» anhand von «|» teilen, und erhalten 69 Zeilen. Diese enthalten mehrere Informationen und HTML-Code. Als nächstes wollen wir die einzelnen Zellen in neue Spalten übertragen. Die einzelnen Zellen in jeder Zeile aus der Tabelle von Wikipedia sind mit <td> voneinander abgetrennt.

value.parseHtml().select("td").join("|")

Um die nun wieder mit einem «|» voneinander getrennten Inhalte in eigene Spalten zu übertragen, verwenden wir «Edit column – split into several columns» und den separator «|».

Für unser Projekt interessant sind die ersten beiden Spalten, die den Namen des Lands und die Bevölkerungszahl enthalten. Auf der Spalte mit der Bevölkerungszahl können wir die verbleibenden html-Tags mit

value.parseHtml().select("td")[0].innerHtml()

entfernen.

Die Ländernamen sind jeweils im ersten <a> Tag enthalten. Diesen greifen wir mit folgendem Befehl heraus:

value.parseHtml().select("a")[0].innerHtml()

Für die meisten Zeilen funktioniert dieser Befehl. Einige der Zeilen entahlten aber nach wie vor HTML. Diesmal können wir hier eine einfache Suchen/Ersetzen Funktion anwenden:

value.replace(/^(.*?)alt="/, "").replace(/" src=".*/, "")

Hier haben wir zwei Reguläre Ausdrücke aneinander gehängt. Der erste löscht alles vor «alt=”», der zweite alles nach «” src=”». Dadurch erhalten wir eine Spalte mit den Ländernamen. Eine etwas ausführlichere Anleitung, in der die einzelnen Befehle erklärt werden, gibt es bei Programming Historian. Im nächsten Beitrag verwenden wir dieses Projekt, um die Metadaten der Fotografien von Annemarie Schwarzenbach um die Bevölkerungszahl der Länder, die sie bereist hat, in Jahr 1939 zu ergänzen.

Fragen, Anregungen oder Wünsche zu histHub oder zur Blogserie zu OpenRefine nehmen wir gerne per Mail entgegen.