Open Source im professionellen Einsatz
Linux-Magazin 07/2014
© James Anak Anthony Collin, 123RF

© James Anak Anthony Collin, 123RF

Daten aggregieren mit Portia

Fokussiertes Spinnchen

Die Börsenkurse in maschinenlesbarer Form mal eben aus dem Internet holen? Kein Problem: Nach ein paar Mausklicks auf eine Börsen-Webseite webt Portia einen geeigneten Kommandozeilenbefehl und wickelt die gewünschten Daten in das passende Json-Format ein.

629

Im Internet verstecken sich nützliche Informationen und Texte oft auf bunten HTML-Seiten, die Interessierte nicht ohne Weiteres extrahieren und maschinell weiterverarbeiten können. Wer etwa automatisiert die aktuellen Börsenkurse aufbereiten oder neue Nachrichten aggregieren möchte, muss erst umständlich den HTML-Code von News-Portalen wie N-TV oder Slashdot zerlegen.

Abhilfe verspricht das in Python geschriebene Portia [1], dessen Name zugleich auf eine Spinnengattung verweist, was im World Wide Web ja Sinn ergibt. Das Tool besteht aus einer Webanwendung, dank der ein Anwender einfach per Mausklick die Börsenkurse, Nachrichten und alle anderen gewünschten Inhalte markiert. Anschließend extrahiert Portia diese Daten und spuckt sie im Json-Format wieder aus.

Unterstützt von einem mitgelieferten Webcrawler durchwühlt Portia zudem komplette Internetauftritte. Benötigt ein Entwickler die Überschriften aller Wikipedia-Artikel, zeigt er Portia lediglich einmal, wo auf einer Wikipedia-Seite die Überschrift klebt. Anschließend durchläuft der Crawler den kompletten Internetauftritt und liefert alle passenden Überschriften im Json-Format zurück.

Spinnennetz

Portia verlangt Python in der Version 2.7, einen C-Compiler, Git, das Paket mit Virtualenv sowie die Entwicklerpakete zu »libffi« , »libxml2« , »libxslt« , »libssl« und Python. Unter Ubuntu spielt der folgende Bandwurm alles Notwendige ein:

sudo apt-get install python-virtualenv python-dev libffi-dev libxml2-dev libxslt1-dev libssl-dev git

Jetzt können Anwender den Quellcode von Github holen:

git clone https://github.com/scrapinghub/portia.git

Portia besteht aus mehreren Einzelteilen: Zunächst stellt Slyd die eigentliche Webanwendung bereit. Sein Kollege Slybot ist ein Webcrawler, der die ausgesuchten Webseiten durchläuft und die gewünschten Informationen ausschneidet. Dazu greift Slybot auf die Dienste von Scrapy [2] zurück. Slyd wiederum liefert seine Seiten über Twisted [3] aus.

Die Befehle aus Listing 1 installieren alle Bestandteile. Die erste Zeile erstellt dabei eine virtuelle Python-Umgebung, die zweite aktiviert sie. Auf diese Weise vermischen sich nicht die in der letzten Zeile nachinstallierten Python-Komponenten mit denen aus der Distribution.

Listing 1

Notwendige Python-Komponenten installieren

01 virtualenv portiaenv
02 source ./portiaenv/bin/activate
03 cd portia/slyd
04 pip install -r requirements.txt

Gelingt die Installation ohne Fehler, startet der Anwender Slyd:

twistd -n slyd

Der Befehl ist korrekt geschrieben – »twistd« ist der Twisted-Daemon.

Schraubstock

Steuert der Portianer nun im Browser die URL »http://localhost:9001/static/main.html« an, erscheint die Seite aus Abbildung 1. Portia unterstützt derzeit nur Chrome und Firefox, wobei die Entwickler Chrome empfehlen.

Abbildung 1: Die Webanwendung gibt sich nach ihrem ersten Aufruf noch recht aufgeräumt.

Zunächst tippt der Anwender in das Eingabefeld am oberen Rand die URL der Seite ein, die er anzapfen möchte. Nach einem Klick auf »Start« lädt Portia die Seite und zeigt sie im großen Bereich darunter an. Das kann ein paar Sekunden dauern und funktioniert nicht mit allen Websites: So weigerte sich Portia im Test, die Seiten des Linux-Magazins zu laden. Sofern die gewünschte Seite erscheint, limitiert Portia die Navigationsmöglichkeiten. Auf der Wikipedia legt die Webanwendung etwa die Suchfunktion lahm, die Links funktionierten jedoch weiterhin.

Jetzt muss der Schnittmeister die benötigten Informationen markieren. Dazu klickt er am oberen Rand auf »Annotate this page« . Portia wechselt jetzt in einen Auswahlmodus: Fährt er mit dem Mauszeiger über ein Element der Seite, das sich ausschneiden lässt, hebt Portia es blau hervor. Der HTML-Code taucht im schwarzen Kasten links oben auf.

Nach einem Klick auf den blauen Bereich erscheint das Fenster aus Abbildung 2. In ihm stellt der Anwender in der linken Dropdown-Liste das HTML-Attribut ein, dessen Inhalt er später übernehmen möchte. »Content« würde den Inhalt des HTML-Elements liefern, bei einer Überschrift also die Überschrift selbst.

Abbildung 2: Wer einem Feld Inhalte zuweisen will, braucht ruhige Finger: Sobald die Maus den schwarzen Kasten verlässt, blendet Portia ihn umgehend aus.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 3 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

comments powered by Disqus

Ausgabe 07/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.