-
Notifications
You must be signed in to change notification settings - Fork 5
Installation
Hier erfährst Du, wie Du ris-scraper installieren und konfigurieren kannst.
Wer einen kompletten Installer will, wo er die Konfiguration des Scrapers in der Weboberfläche statt in der MongoDB erstellen kann, sollte im Schwesterprojekt ris-web vorbeischauen.
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 zlib1g-dev build-essential python-virtualenv
Wir installieren uns die neuste Version von ris-scraper in einem Verzeichnis unserer Wahl mit diesen Befehlen:
$ mkdir /srv/www
$ mkdir /srv/www/ris-scraper
$ cd /srv/www/ris-scraper
$ git clone git://github.com/okfde/ris-scraper.git .
ris-scraper
sollte in der Regel ris
gehören (jedenfalls nicht root
):
$ chown ris:ris -R /srv/www/ris-scraper/
Jetzt erzeugen wir eine eigene Python-Umgebung mit virtualenv:
$ virtualenv venv
Nun aktiviert man die gerade erzeuge Umgebung mit diesem Befehl:
$ source venv/bin/activate
Zunächst updaten wir pip und setuptools:
$ pip install --upgrade pip setuptools
Die für den Scraper benötigten Python-Module installieren wir nun so in die aktive Umgebung:
$ pip install -r requirements.txt
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:
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 config.py
anzupassen. Beim Aufruf
des scrapers wird dann automatisch die Konfiguration in config.py verwendet,
wenn nichts anderes definiert wird.
Beachte beim Anpassen der Konfigurationsdatei, dass es sich um Python-Code handelt. Das bedeutet beispielswiese, dass die genaue Schreibweise der Namen von Konfigurationsvariablen nicht verändert werden darf.
Die Einstellungen im Einzelnen:
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.
Die restliche Konfiguration befindet sich in der MongoDB. Das Schwesterprojekt ris-web hat eine komfortable Weboberfläche zur Verwaltung. Vorlagen für die Konfiguration befinden sich im Ordner config. Selbstverständlich kann man die JSON Files auch direkt in der MongoDB manipulieren, das gibt ein bisschen Übung in der MongoDB Shell.
Die Konfiguration ist dabei unterteilt in Bodies (also Körperschaften, welche gescraped werden), Regions (Zusammenfassungen von Bodies) und der Hauptkonfiguration. Für den Scraper relevant ist die Hauptkonfiguration und die Bodies.
Im Falle der Bodies gibt die zentrale Konfiguration etliche Werte vor, diese kann dann in dem jeweiligen Body ergänzt werden. Wenn also eine Stadt in einem Fall einen abweichenden XPATH benötigt, kann dieser - und nur dieser - in den Body geschrieben werden, während der Rest in der Hauptkonfiguration bleibt.
In ['scraper'] befinden sich alle für den Scraper relevanten Variablen (Link zur Vorlage). Die wichtigsten wären:
Dorthin loggt der Scraper.
Das Level des Loggings. Erlaubte Werte sind die Log-Level vom Python-Modul logging. Wenn man debuggen möchte, lohnt sich ein Blick in den Parameter --interative, welcher alle Logmeldungen auch in die Konsole auf stdout ausgibt.
In ['config'] bzw. ['config']['scraper'] befinden sich alle für den Scraper relevanten Variablen (Link zur Vorlage). Die wichtigsten wären:
Dies ist die Basis-URL des 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/
Mit type sagst Du dem Scraper, um was für ein Ratsinformationssystem es sich handelt. Zur Zeit werden sessionnet-php, sessionnet-asp und allris unterstützt. Allerdings Vorsicht: allris ist noch an ein anderes Datenmodell angepasst, d.h. dort fehlt noch ein wenig Entwicklungsarbeit.
rgs 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örperschaft 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. Fülle bitte aber immer 12 Zeichen aus, d.h. ergänze fehlende Stellen mit Nullen.
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/
Falls im Ratsinformationssystem Parteien unter mehreren Namen vorkommen, kann man sie hiermit zu einer einzigen Partei verschmelzen. party_alias erwartet eine Liste an Listen. Zum Beispiel: 'Partei 1 mit Schreibfehler','Partei 1'],['Partei 2 mit Schreibfehler','Partei 2'
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_strings 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.