-
Notifications
You must be signed in to change notification settings - Fork 8
Installation
Hier erfährst Du, wie Du Scrape-A-RIS installieren und konfigurieren kannst.
Übrigens: Es gibt eine spezielle Version der Installationsanleitung für Debian auf Amazon EC2. Wenn das genau Dein Ding ist, verwende die spezielle Anleitung und kommt ggf. für Hilfe bei der Konfiguration hierher zurück.
Zunächst solltest Du sicher stellen, dass einige benötigte Pakete vorhanden sind. Falls Du eine Debian-basierte Linux-Distribution verwendest, könntest Du das mit apt-get so machen:
>>> sudo apt-get update
>>> sudo apt-get install libxml2-dev libxslt1-dev build-essential
Wir installieren uns die neuste Version von Scrape-A-RIS in einem Verzeichnis unserer Wahl mit diesem Befehl:
>>> git clone git://github.com/marians/scrape-a-ris.git
Danach wechseln wir ins Verzeichnis scrape-a-ris.
Jetzt erzeugen wir eine eigene Python-Umgebung mit virtualenv. Wer virtualenv noch nicht hat, kann es mit diesem Befehl installieren:
>>> sudo pip install virtualenv
Wenn virtualenv isntalliert ist, wechselt man in das Hauptverzeichnis von Scrape-A-RIS (wo README.md liegt) und führt den folgenden Befehl aus, um eine neue Umgebung einzurichten:
>>> virtualenv --no-site-packages venv
Nun aktiviert man die gerade erzeuge Umgebung mit diesem Befehl:
>>> source venv/bin/activate
Die benötigten Python-Module installieren wir nun so in die aktive Umgebung:
>>> pip install -r requirements.txt
Falls Du nicht Python 2.7 nutzt, sondern Version 2.6, musst Du zusätzlich noch zwei Module manuell hinzu installieren, die bei Python 2.7 zur Standardausstattung gehören. Deine Python-Version kannst Du übrigens durch diesen Aufruf herausfinden:
>>> python --version
Ist die Version also kleiner als 2.7, dann installiere noch argparse und importlib nach:
>>> pip install argparse importlib
Damit ist die Python-Umgebung fertig.
An dieser Stelle gibt es mehrere Möglichkeiten. Für Entwicklungszwecke wirst Du hier eventuell etwas anderes machen wollen, als es für einen produktiven Server der Fall der Fall ist.
Die Firma 10gen, das sind die Entwickler von MongoDB, stellen Pakete und Anleitungen für Debian und für Ubuntu zur Verfügung. Wer eine dieser beiden Distributionen nutzen möchte, sollte nach den entsprechenden Anleitungen verfahren:
Für Testzwecke auf einer lokalen Umgebung, beispielweise unter MacOS, empfehlen wir das einfache Herunterladen einer Binary-Version von MongoDB von www.mongodb.org/downloads. Das Starten erfolgt einfach über die Kommandozeile, dabei kann auch der Pfad zum Verzeichnis, wo MongoDB seine Daten ablegen soll, angegeben werden:
>>> bin/mongodb --dbpath /pfad/zu/meiner/datenbank
Der Pfad /pfad/zu/meiner/datenbank steht für ein beliebiges Verzeichnis, in dem MongoDB die eigenen Datenbanken ablegen soll.
Beenden kann man den Server, wenn er auf diesem Weg gestartet wurde, übrigens mit Eingabe von Ctrl+C in der selben Konsole.
Sicherheitshinweis: MongoDB ist standardmäßig offen wie ein Scheunentor. Jeder kann über das Netzwerk Daten lesen und löschen. Um das zu verhindern, sollten die Firewall-Einstellungen mindestens so angepasst werden, dass die entsprechenden Ports nur von localhost aus erreichbar sind.
Als nächstes erstellen wir eine Konfigurationsdatei.
Der einfachste Weg, eine Konfiguration anzulegen und später zu nutzen, ist das mitgelieferte Beispiel zu kopieren und anzupassen. Beim Aufruf des scrapers wird dann automatisch die Konfiguration in config.py verwendet, wenn nichts anderes definiert wird.
>>> cp config_example.py config.py
(Es ist möglich, verschiedene Konfigurationsdateien vorzuhalten, z.B. für verschiedene Ratsinformationssysteme oder für Test- bzw. Produktionszwecke. Die Dateien müssen lediglich alle im Hauptverzeichnis der Anwendung liegen. Beim Aufruf von Scrape-a-RIS kann dann mit dem Parameter -c eine bestimmte Datei ausgewählt werden.)
Die Konfigurationsdatei muss nun angepasst werden. Beachte dabei, dass es sich um Python-Code handelt. Das bedeutet beispielswiese, dass die genaue Schreibweise der Namen von Konfigurationsvariablen nicht verändert werden darf. Es bedeutet auch, dass man die Variablen an anderer Stelle nutzen kann, um Wiederholungen zu vermeiden.
Die Einstellungen im Einzelnen:
RS steht für "Regionalschlüssel". Wenn Du ein Ratsinformationssystem (RIS) scrapen willst, ist die Annahme, dass dieses zu einer Gemeinde, einem Gemeindeverbund, einem Landkreis oder ähnlichem gehört. Alle diese Gebietskörperschaften haben einen solchen Regionalschlüssel.
In einigen Fällen kannst Du den Regionalschlüssel schon auf der Wikipedia-Seite zur jeweiligen Köroerschaft finden. Die offizielle Quelle ist jedoch das Gemeindeverzeichnis des Statistischen Bundesamts. Dieses kann man unter anderem im Excel-Format herunter laden und darin nach seiner Gemeinde suchen.
Für eine Gemeinde ist der RS immer 12stellig, ohne Leerzeichen. Für Verbandsgemeinden sind es neun Stellen, bei Landkreisen sind es fünf Stellen.
Warum brauchen wir den Regionalschlüssel eigentlich?
Der RS wird hier benötigt, um es Dir zu ermöglichen, die Daten von mehreren Ratsinformationssystemen in die selbe Datenbank zu schreiben. Solltest Du nicht in der Lage sein, den richtigen RS für das RIS der Wahl zu finden, kannst Du Dir einen beliebigen 8 Zeichen langen String ausdenken (nur idealerweise keinen existierenden RS!). Für verschiedene Konfigurationen zu unterschiedlichen RIS musst Du entsprechend selbst darauf achten, dass die RS sich unterscheiden. Sonst überschreibt der Scraper bereits vorhandene Daten aus einem anderen RIS.
Der Datenbank-Typ kann nur "mongodb" sein. Aber vielleicht ändert sich das in Zukunft auch.
Hier kannst Du den Namen der Datenbank in MongoDB festlegen.
Wenn MongoDB auf der selben Maschine läuft, belasse dies bei "localhost". Sonst gib die IP-Adresse oder den Hostnamen des Servers an.
Der Port für den MongoDB-Server kann ggf. hier angepasst werden.
Dies ist die Basis-URL des SessionNet Ratsinformationssystems, das Du scrapen möchtest. Sie ist nicht zu verwechseln mit der URL der Startseite. Beispiel:
In Mannheim lautet die URL der Startseite
http://buergerinfo.mannheim.de/buergerinfo/infobi.asp
und die URL einer Sitzungs-Detailseite:
http://buergerinfo.mannheim.de/buergerinfo/to0040.asp?__ksinr=6080
Die Basis-URL ist der gemeinsame Teil dieser beiden URLs, nämlich
http://buergerinfo.mannheim.de/buergerinfo/
Der Name (HTTP User Agent), mit dem der Scraper sich bei den Anfragen an das Ratsinformationssystems identifiziert. Dieser ist im Prinzip beliebig. Beachte, dass dieser Name üblicherweise beim Betreiber in Log-Dateien geschrieben wird.
Die Seiten-URLs in der Konfiguration sind nur anzupassen, wenn der Betreiber gegenüber dem Standard-Produkt Anpassungen an den URLs vorgenommen hat.
Es gibt zu jeder URL zwei Konfigurations-Strings. Der eine hat einen Namen endend mit _PARSE_PATTERN und dient dem Erkennen von Links zu den entsprechenden Seiten sowie zum Auslesen der URL-Parameter. Diese URIs sind immer relativ, d.h. es fehlt der Teil, der in BASE_URL definiert ist.
Der zweite endet mit _PRINT_PATTERN und dient der Erzeugung von absoluten URLs für den jeweiligen Seitentyp. Hier ist immer BASE_URL vorangestellt.
Hier geht es ans eingemachte der Scraper-Logik. Daran solltest Du nur dann etwas verändern, wenn die Einstellungen aus der config_example.py für Dein System nicht funktionieren und Du weißt, wie XPath funktioniert.
Die config_example.py enthält für viele XPath-Strings mehrere Varianten, die auskommentiert sind. Beispielsweise sind dort XPath-Pfade für die bei der PHP-Version von SessionNet leicht anders strukturierten Seiten enthalten.
Wenn Du Unterstützung bei der Anpassung benötigst, kannst Du Dich an die RIS-Öffner Mailingliste wenden.
https://groups.google.com/group/ris-oeffner/
Hiermit können verschiedene im RIS gebräuchliche Formulierungen zum Ergebnis eines Vorgangs auf eine standardisierte Form gebracht werden. Sofern eine vorkommende Formulierung in RESULT_STRING nicht gefunden wird, wird die tatsächlich genutzte Formulierung in die Datenbank geschrieben und eine Warnung ausgegeben.
Das war's erst mal mit der Konfiguration. Weiter geht es mit der Anleitungsseite zu Benutzung.