Blog von Thomas Puppe, Web Developer.

News-Aufmacher zur Präsidentenwahl in den USA

Kürzlich habe ich mit dem Python-Framework Scrapy herumgespielt. Erstens wollte ich ausprobieren, wie gut es sich bedienen lässt. Zweitens war ich neugierig, wie die Aufmacher von News-Websies vor und bei der US-Präsidentschaftswahl bestückt werden. Beides lässt sich praktischerweise gut kombinieren :-)

Das Vorgehen

Zunächst habe ich die Homepages der News-Seiten mehrere Tage lang im 5-Minuten-Takt heruntergeladen.

#!/bin/bash
currenttime=`date '+%Y-%m-%d_%H-%M-%S'`;
foldername="/var/www/newscurl/$currenttime";
mkdir $foldername;
cd $foldername;

curl -o spiegel.html http://www.spiegel.de/
curl -o zeit.html http://www.zeit.de/index
curl -o lr-online.html http://www.lr-online.de/

Damit ist das HTML der Seite gesichert, und kann später immer wieder analysiert werden. Was mit Scrapy auch recht einfach gelingt:

import os
import scrapy

class LocalSpider(scrapy.Spider):
    name = 'localspider'
    # provided via `python -m SimpleHTTPServer 9090`, since file:// url did not work
    start_urls = ['http://localhost:9090/']

    def parse_single_page(self, response):
        yield {
            'title': response.css('main article h2 a::attr(title)').extract_first(),
            'url': response.css('main article h2 a::attr(href)').extract_first(),
            'image': response.css('main article img::attr(src)').extract_first()
        }

    def parse(self, response):
        # entry point: directory listing of localhost:9090
        for link in response.css('a'):
            link_url = link.css('::attr(href)').extract_first()

            if link_url.endswith('zeit.html'):
                yield scrapy.Request(response.urljoin(link_url), callback=self.parse_single_page)
            else:
                yield scrapy.Request(response.urljoin(link_url), callback=self.parse)

Mit scrapy runspider localspider.py -o result.json --logfile=localspider.log erhalte ich so ein JSON-File mit allen Ergebnissen und ein umfangreiches Logfile des Scraping-Vorgangs.

Zum Schluss robbe ich mittels PHP über das JSON-File und gebe die Inhalte als HTML-Tabelle aus. Das Ergebnis (weder für Mobilgeräte optimiert, noch für sonstwas) schaut so aus: http://lab.thomaspuppe.de/us-wahl-news-aufmacher/

Fazit 1: Scrapy

Die Bedienung ist sehr einfach. Scrapy war eines der ersten Python-Frameworks, das ich problemlos installieren und benutzen konnte. Das liegt vielleicht an meiner wachsenden Python-Erfahrung, wahrscheinlich war viel Glück dabei, und auf jeden Fall bietet die Scrapy-Website einen super Einstieg samt funktionierendem Hello-World.

Die Selektoren entsprechen im Grunde CSS-Selektoren. Womit mans chon sehr weit kommt. Die asynchronen yield-Aufrufe sind ein schöner Weg zur Parallelisierung der Anfragen. Der Output im JSON-Format kommt mir entgegen. Andere Varianten habe ich nicht getestet.

Insgesamt war mein Test-Case ja sehr einfach. Da sieht man nciht viel vom Framework. Aber mein erster Eindruck ist gut. Auch, weil man im Netz jede Menge Doku und Rat zu Scrapy findet. Und es eine "Scraping as a Servcie" Anbindung gib, mit der man seine Scripte in die Cloud schießt und der Dienst Scrapinghub sich um das regelmäßige Crawling kümmert.

Fazit 2: Die Aufmacher

Das Ergebnis kann man hier ansehen: Aufmacher auf deutschen News-Websites zur US-Wahl (Achtung: 4 MB groß). Die Legende zeigt die Farbcodes an. Per Mouseover sieht man den Titel. Die meisten Felder sind zum Artikel verlinkt. Zoomen funktioniert. Mobil sieht man was, aber Mouseover tut natürlich nicht.

Screenshot der Visualisierung Aufmacher auf deutschen News-Websites zur US-Wahl
Screenshot der Visualisierung

Was sieht man?

Themen: Am Freitag war die Türkei das dominante Aufmacherthema. Am Wochenende wechselte das über deutsche Politik auf die US-Wahl.

Montag ging es um Clinton (das FBI und die E-Mails), wechselte dann zu allgemeiner/beidseitiger Berichterstattung.

Dienstag hatten wir den ganzen Tag allgemeine (nicht auf einen kandidaten fokussierte) US-Wahl-Aufmacher, nur unterbrochen durch den "Prediger ohne Gesicht". Ab dem Abend dann kippte es schon in Richtung Donald Trump (klickte wohl besser).

Im Laufe der Nacht gab es zunächst allgemeine Wahlticker, bis es am Morgen dann natürlich zu Trump wechselte. Um Hillary Clinton ging es erst am Abend wieder, als sie vor die Presse trat.

Die lokalen Zeitungen aus Berlin und der Lausitz haben lokale Themen und nationale Themen als Aufmacher. Pünktlich am Mittwoch schwenkten sie zur US-Wahl. Die Morgenpost zunächst mit einer Clinton-Party in Berlin.

So weit, so erwartbar.

Verfügbarkeit: Alle betrachteten Angebote waren durchweg verfügbar. ZEIT Online hatte zur wichtigsten geplanten Nachrichtenlage des Jahres Aussetzer. Shame on us.

Und sonst?

Der Zieleinlauf

In dieser Reihenfolge wurde der Sieg Trumps verkündet (konkrete Aussage, ohne "praktisch nicht mehr einholbar" uns so):