Ein Web-Scraping-Toolkit für Journalist*innen

Web Scraping ist eine der nützlichsten und am wenigsten verstandenen Methoden für Journalist*innen, um Daten zu sammeln. Es ist die Sache, die dir hilft, wenn du bei deiner Online-Recherche auf Informationen stößt, die sich als Daten qualifizieren, aber keinen praktischen "Download"-Button haben. Hier ist deine Anleitung, wie du loslegen kannst - ganz ohne Programmierkenntnisse.

1/28/2019

Sagen wir, ich suche zum Beispiel nach Kaffee auf Amazon. Wenn ich auf Suchen drücke, erhalte ich eine Liste von Ergebnissen, die so gemacht ist, dass sie für Menschen leicht lesbar ist. Aber es hilft mir nicht viel, wenn ich die zugrundeliegenden Daten analysieren möchte – wie viel die durchschnittliche Kaffeepackung kostet oder welche Marken den Amazon-Kaffeemarkt dominieren, zum Beispiel. Für diesen Zweck ist eine handliche Tabelle vielleicht praktischer.

Amazon Kaffeeliste und Tabelle mit Daten aus dieser Liste

Eine Möglichkeit wäre also, die Informationen zu jedem Ergebnis per Hand abzuschreiben. Sagen wir, das kostet dem/der unbezahlten Praktikant*in – den/die ich eingestellt habe, weil ich die Arbeit nicht selbst machen wollte – 5 Sekunden für jedes Suchergebnis. Bei 200.000 Ergebnissen dauert das immer noch mehr als einen Monat, wenn er/sie in Vollzeit von 9 bis 5 in konstanter Geschwindigkeit arbeitet, ohne Pause.

Selbst wenn ich unbezahlte Praktikant*innen zur Hand hätte, ist dieser Weg einfach nicht praktikabel. Meine Hauptmotivation, Programmieren zu lernen, war schon immer die Faulheit: Ich hasse es, die gleiche langweilige Sache zweimal zu machen, geschweige denn 200.000 Mal. Also habe ich gelernt, wie man Daten scrapet.

Scraper sind kleine Programme, die Informationen aus Webseiten extrahieren und veredeln.

Sie können in Form von Point-and-Click-Tools oder Skripten kommen, die du in einer Programmiersprache schreibst. Ihre großen Vorteile sind:

  • Sie sind viel schneller als manuelle Arbeit,
  • sie können die Aufgabe der Informationsextraktion automatisieren und
  • können wiederverwendet werden, wann immer du dieselbe Website erneut scrapen musst.

Wenn du viele unterschiedlich strukturierte Seiten scrapen musst, wirst du allerdings schnell ihren größten Nachteil bemerken: Scraper sind ziemlich anfällig. Sie müssen genau für die Struktur einer Website konfiguriert werden. Ändert sich die Struktur, kann es sein, dass dein Scraper kaputt geht und nicht mehr den Output liefert, den du erwartest.

Das ist auch der Unterschied zwischen Scrapern und APIs. Falls du von diesen noch nicht gehört hast: Application Programming Interfaces sind Portale, mit denen Website-Ersteller*innen Entwickler*innen direkten Zugriff auf die strukturierte Datenbank gewähren, in der sie ihre Informationen speichern. Sie sind viel stabiler, weil sie für die Datenextraktion konzipiert sind: Der/die Website-Ersteller*in darf entscheiden, nach welchen Regeln du Zugriff bekommst.

von der strukturierten Datenbank zur unstrukturierten Website zur Tabelle via Scraper, oder direkt von der Datenbank zur Tabelle über eine API

Sie können den Umfang der Daten, auf die du Zugriff hast, oder die Extraktionsgeschwindigkeit einschränken. Scraper hingegen können alles extrahieren, was du auf einer Webseite sehen kannst, und sogar einige Dinge, die du nicht sehen kannst (die, die im Quellcode der Webseite stehen – dazu kommen wir gleich). Außerdem hat nicht jede Webseite eine API, aber du kannst Informationen von praktisch jeder Seite scrapen.

Scraper nehmen einen wichtigen Platz in der Bandbreite der Datenquellen ein, die Datenjournalist*innen zur Verfügung stehen. Also lass uns loslegen: hier lernst du, wie du selbst Daten scrapen kannst.

Zunächst ein kleiner Dämpfer: Scraping ist eine der fortgeschritteneren Methoden, um Daten zu sammeln. Dennoch gibt es einige Tools, die du sofort einsetzen kannst – und solltest.

Level 1: Erfasse Tabellen von Websites

Dies ist der erste Schritt in deiner Scraping-Karriere: Es gibt Erweiterungen für Chrome (Table Capture) und Firefox (Table to Excel), die dir helfen, Tabellen von Webseiten einfach in Excel oder ein ähnliches Programm zu kopieren. Es ist das gleiche Programm, sie haben nur unterschiedliche Namen, denn warum sollte man es einfach machen. (Hinweis: wenn du früher ein Add-on namens TableTools in Firefox hattest und dich fragst, wo es hin ist: es heißt nun Table to Excel. Installiere es am besten neu!)

Bei manchen Tabellen reicht es, sie im Browser zu markieren und mit Copy & Paste einzufügen, aber das bringt oft die Struktur oder die Formatierung der Tabelle durcheinander. Diese Erweiterungen ersparen dir einiges an Ärger. Wenn du sie installiert hast, kannst du einfach loslegen:

  1. Klicke mit der rechten Maustaste auf eine beliebige Tabelle auf einer Webseite (probiere zum Beispiel diese Liste der Länder im Eurovision Song Contest)
  2. Wähle die Option Table to Excel – Display Inline (oder Table Capture – Display Inline wenn du in Chrome bist). Ein Feld sollte in der oberen linken Ecke der Tabelle erscheinen, das etwas sagt wie In die Zwischenablage kopieren und In Excel speichern

    screenshot of data from Wikipedia table

  3. Klicke auf Kopieren in die Zwischenablage
  4. Öffne Excel oder ein Programm deiner Wahl
  5. Füge die Daten ein. Voila – eine ordentlich formatierte Tabelle.

    Screenshot der Daten in der Excel-Tabelle

Level 2: Scrape eine einzelne Website mit der Scraper-Erweiterung

Wenn du dich ein wenig abenteuerlicher fühlst, probiere die Scraper-Erweiterung für Chrome aus. Sie kann mehr als nur Tabellen scrapen – sie scrabet alles, was du auf einer Website sehen kannst, ohne dass Programmierkenntnisse nötig sind.

Sagen wir, ich brauche dringend eine Tabelle mit Links zu jedem xkcd Comic, der existiert, sowie dessen Veröffentlichungsdatum und Titel. Mit der Scraper-Erweiterung kannst du auf die Archiv-Seite gehen,

  1. Rechtsklick auf einen der Links und
  2. Wähle Ähnliches….

Ein neues Fenster öffnet sich, und wenn du eine Minute wartest, wirst du sehen, dass das Programm bereits versucht hat zu erraten, über welche Elemente der Webseite du Informationen haben möchtest. Es hat gesehen, dass es viele Links wie den, den du angeklickt hast, auf der Seite gibt, und dachte, dass du vielleicht alle von ihnen scrapen willst.

Wenn du dich ein wenig mit dem Innenleben einer Webseite auskennst, wirst du erkennen, dass das XPath Feld angibt, welche Arten von Elementen du extrahieren willst. Falls nicht: Mach dir darüber erst einmal keine Gedanken, das wird automatisch generiert, wenn du auf das richtige Element zum Scrapen klickst.

Für Links extrahiert es standardmäßig den Text und die URL. Wenn du mehr Eigenschaften extrahieren möchtest, versuche dies:

  1. Klicke auf das kleine grüne + neben der URL
  2. Tippe @title in das neue Feld, auf dem XPath steht, und Date (oder irgendetwas anderes, das ist nur der Spaltenname), wo Name steht.
  3. Klicke Scrape
  4. Warte eine Sekunde

    Screenshot der Chrome Scraper Extension in Aktion

Dein Fenster sollte nun so aussehen wie das auf dem Bild. Herzlichen Glückwunsch: Du hast nun auch das Veröffentlichungsdatum der einzelnen Comics extrahiert. Das funktioniert nur bei diesem Beispiel und auch nur, weil die xkcd-Website-Administrator*innen, versteckt im Quellcode der Website, auch ein title-Element für jeden Link angegeben haben (es lässt einen Tooltip erscheinen, wenn du mit dem Mauszeiger über jeden Link fährst) und das Veröffentlichungsdatum in dieses Element geschrieben haben.

Das wird für dich Sinn machen, wenn du schon ein bisschen weißt, wie Webseiten funktionieren. Wenn nicht, kann ich dir mein Journocode-Tutorial zu den Grundlagen von HTML, CSS und JavaScript empfehlen. Hier gebe ich dir die ganz kurze Version: Die Struktur einer Website wird hauptsächlich durch eine Sprache namens HTML bestimmt. Es ist die mit den vielen Pfeilklammern. Du kannst die Struktur der xkcd Archivseite im Bild unten sehen (sieh selbst nach, indem du mit der rechten Maustaste auf eine Website klickst und Inspect oder Element untersuchen auswählst, um die Entwickler*innentools deines Browsers zu öffnen). Die Elemente title und href sind diejenigen, die die Scraper-Erweiterung aus der Seite extrahiert hat.

Beispiel, wie man die Struktur hinter den auf der Webseite angezeigten Daten findet

Fühl dich frei, die Scraper-Erweiterung auf allen Informationen, die du extrahieren möchtest, sowie auf anderen Elementen auszuprobieren – es funktioniert nicht nur auf Links. Sobald du die gewünschten Informationen hast und die Tabellenvorschau gut aussieht, klicke einfach auf In die Zwischenablage kopieren oder In Google Docs exportieren… und zaubere etwas mit deinen neu gescrapten Daten!

Level 3: Scrape viele Webseiten mit der Web Scraper Erweiterung

Oft werden die Daten, die wir wollen, nicht ordentlich auf einer Seite präsentiert, sondern über mehrere Seiten verteilt. Ein sehr häufiges Beispiel dafür ist eine Suche, die immer nur ein paar Ergebnisse anzeigt. Selbst mit unseren ausgefallenen Erweiterungen müssten wir uns dann durch jede Ergebnisseite klicken und sie einzeln scrapen. Aber solche sich ständig wiederholenden Arbeitsschritte wollten wir doch nicht mehr machen, oder? Zum Glück gibt es auch dafür eine programmierfreie Lösung. Es ist die Web Scraper Erweiterung für Chrome.

Wie du wahrscheinlich schon bei der vorherigen Erweiterung gemerkt hast, musst du wirklich wissen, wie Webseiten funktionieren, um komplexere Scraper zu bauen. Web Scraper ist immer noch ziemlich interaktiv und erfordert keine Programmierung, aber wenn du noch nie die Entwickler*innentools in deinem Browser geöffnet hast, könnte es ziemlich schnell verwirrend werden.

Der große Vorteil von Web Scraper ist, dass du nicht nur eine Seite scrapen kannst, sondern auch in ihre Unterseiten gehen kannst. Wenn du also zum Beispiel nicht nur die Titel und Links aller xkcd-Comics scrapen willst, sondern auch die direkte URL jedes Bildes extrahieren möchtest, könntest du die Erweiterung dazu bringen, auf den Link zu jedem Comic der Reihe zu klicken, die Bild-URL von jeder Unterseite zu holen und sie zu deinem Datensatz hinzuzufügen.

Ich werde hier nicht zu sehr ins Detail gehen, wie das funktioniert – das könnte Material für ein eigenes Tutorial sein – aber ich möchte dir den grundlegenden Prozess zeigen.

    1. Web Scraper befindet sich in den Entwickler*innentools, also klicke mit der rechten Maustaste auf > Inspect oder Element untersuchen und wähle den Web Scraper Reiter.
    2. Erstelle eine Sitemap.
    3. Klicke in die Sitemap und erstelle einen Selektor. Dieser teilt dem Programm mit, von welchen Elementen du Informationen scrapen willst.
    4. Klicke auf Sitemap [Name] > Scrape und warte bis es fertig ist.
    5. Klicke auf Sitemap [Name] > Daten als CSV exportieren.

Glückwunsch! Du hast es geschafft.

Das Ergebnis ist das gleiche, wie wir es zuvor mit dem Scraper Plugin erhalten haben. Der spannende Teil beginnt, sobald du eine weitere Ebene zum Prozess hinzufügst. Es funktioniert ziemlich genau so:

  1. Klicke in die Sitemap, klicke in den Selektor und erstelle einen neuen Selektor innerhalb des ersten. (Du kannst die Hierarchie der ausgewählten Elemente sehen, indem du auf Sitemap [Name] > Selektordiagramm klickst.)
  2. Klicke auf Sitemap [Name] > Scrape und warte, bis es fertig ist. Das kann eine Weile dauern, abhängig von der Anzahl der Unterseiten, die du durchlaufen musst. Sobald es fertig ist:
  3. Klicke auf Sitemap [Name] und Exportiere Daten als CSV.
  4. Glückwunsch! Du hast es geschafft.

Noch mehr Tools

Damit kannst du viele der Scraping-Herausforderungen meistern, die sich dir stellen werden. Natürlich gibt es noch viele weitere mögliche Tools da draußen. Ich kenne die meisten nicht, und viele der ausgefalleneren sind ziemlich teuer, aber das sollte dich nicht davon abhalten, sie mal selbst auszuprobieren oder zumindest die Namen zu kennen. Hier ist also eine unvollständige Liste von anderen Tools, die du dir ansehen könntest:

Programmierbibliotheken für Scraping

Wie du siehst, gibt es eine ganze Reihe von Möglichkeiten für diejenigen unter euch, die überhaupt nicht programmieren können. Dennoch gibt dir das Programmieren deines eigenen Scrapers viel mehr Freiheit im Prozess und hilft dir, die Einschränkungen der Tools, die ich gerade vorgestellt habe, zu überwinden. Ich benutze meistens die Funktionsbibliothek rvest, um mein Scraping mit der Programmiersprache R zu machen, weil ich mich damit am besten auskenne. Aber Python, wie auch Node (so wurde mir gesagt) und wahrscheinlich viele andere Programmiersprachen bieten ebenfalls Scraping-Funktionalitäten. Einen Einstieg in das Scraping mit R oder Python findest du in unserem Tutorial.

the guardian datablog screenshot

Einige Funktionsbibliotheken, die dir beim Scraping helfen, sind neben rvest, Requests, Puppeteer, PhantomJS, Selenium und Scrapy. Probiere sie aus und verrate uns deinen Favoriten! Ich verwende Selenium für komplexere Probleme. Denn es gibt einige Situationen, in denen selbst viele Programmierbibliotheken aufgeben.

Technische Schwierigkeiten

Es gibt einige Hürden, auf die du bei deiner Arbeit stoßen könntest, und ich möchte hier einige häufige Phänomene durchgehen, um dir eine Vorwarnung zu geben:

Daten sind nicht Teil des Textes, sondern in einem Bild oder einem PDF

Scraper können nur "sehen", was im Quellcode einer Website steht, also musst du hier andere Methoden anwenden. Lade die Dokumente herunter, seien es Bilder oder PDFs, die du analysieren willst, und verwende eine entsprechende Software. Wenn es sich um ein Bild oder eine nicht durchsuchbare PDF-Datei handelt, brauchst du vielleicht eine Software zur optischen Zeichenerkennung (OCR).

Die Website ist zu unstrukturiert

Wenn die Website nicht einheitlich strukturiert ist, wird dein Scraper es schwer haben, herauszufinden, wo sich die Daten befinden, die du scrapen willst. Versuche, einen Algorithmus zur Mustererkennung zu verwenden. Regular Expressions zum Beispiel könnten der richtige Weg sein.

Die Daten werden dynamisch geladen

Das kennst du von Social Media Webseiten: Facebook oder Twitter laden nicht ihre gesamte Datenbank auf einmal, sondern haben infinite scrolling, bei dem ein neuer Abschnitt erst sichtbar wird, wenn du nach unten scrollst. In diesem Fall brauchst du vielleicht eine Scraping-Bibliothek, die tatsächlich einen/eine Benutzer*in simuliert und tatsächlich mit der Website interagiert – nach unten scrollen, Benutzer*innendaten eingeben, alles was du tust. Selenium kann dies zum Beispiel. Hinweis: Dies ist eine der fortgeschritteneren Methoden, auch für Scraping, aber auch eine der coolsten. Zu sehen, wie sich ein Browserfenster von selbst öffnet und Informationen eingibt, weil ich einem Roboter gesagt habe, dass er das tun soll, ist ziemlich genial.

Das Ziel liegt hinter einer Paywall oder einem Login-Fenster

Selenium oder ähnliche Bibliotheken können dir auch hier helfen – wie gesagt, sie können alles, was du im Web machen kannst, nur eben automatisch. Sei aber vorsichtig, wenn du Inhalte hinter einem Login-Fenster scrapen willst: Einige Websites verbieten die automatische Datenextraktion, und wenn du einen Account erstellst und ihre Nutzungsbedingungen akzeptierst, könntest du tatsächlich deinen Vertrag mit ihnen brechen, indem du es trotzdem tust.

Deine IP wird blockiert

Einige Seiten versuchen, ungewöhnlichen Traffic zu erkennen. Wenn du sehr schnell sehr viele Seiten scrapest, kann es sein, dass sie deine IP blockieren, um sich vor Angriffen zu schützen oder um zu verhindern, dass du Daten extrahierst. Es gibt Dienste, die IP-Rotation anbieten: Sie ändern deine IP automatisch alle X Sekunden. Ein VPN kann auch hilfreich sein. Trotzdem, wenn du auf diese Sperre stößt, solltest du vielleicht mit deiner Rechtsabteilung klären, ob dein Scraping noch legal ist.

Captchas

Die kennst du. Sie sollen sicherstellen, dass die Leute, die eine Seite nutzen, tatsächlich Menschen sind. Und dein Scraper könnte einer der Nicht-Menschen sein, die sie versuchen, draußen zu halten. Das ist ein kniffliges Problem. Du könntest darüber nachdenken, die Captchas von Hand einzugeben, wenn dein Scraper auf sie stößt, oder, wenn du das nicht tun willst und wirklich wissen willst, was hinter dem no robots Zeichen steht, könntest du einen richtigen Nerd um Hilfe bitten.

Happy scraping, und keine Panik!

Doch keine Sorge: Die meisten Situationen erfordern keine Hochleistungs-Scraper.

Wie du siehst, gibt es eine ganze Reihe von Möglichkeiten für diejenigen unter euch, die überhaupt nicht programmieren. Eigene Scraper zu programmieren gibt dir noch mehr Freiheit im Prozess und hilft dir, die Einschränkungen der Tools, die ich gerade vorgestellt habe, zu überwinden. Trotzdem: wenn du weißt, wie man eine Tabelle extrahiert und vielleicht sogar, wie man die Scraper-Erweiterung benutzt: super! Du weißt bereits mehr als 99 Prozent der Bevölkerung. Und diese Tatsache ist definitiv wahr – wir sind schließlich Datenjournalist*innen.

Wir hoffen, dass diese Tutorial-Slash-Toolkit-Übersicht dir einen guten Startpunkt für deine Scraping-Bestrebungen gegeben hat.

Danke fürs Lesen und viel Spaß beim Scrapen!