Created
May 13, 2018 21:24
-
-
Save kasnder/d6cb953da52286d986b8fe8f50545f00 to your computer and use it in GitHub Desktop.
Python script to aggreate and filter the events of the courts in Aachen, Germany.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
import urllib2 | |
import locale | |
import csv, codecs, cStringIO | |
from pprint import pprint | |
import time | |
from BeautifulSoup import BeautifulSoup | |
# From the Pyton documentation | |
class UnicodeWriter: | |
""" | |
A CSV writer which will write rows to CSV file "f", | |
which is encoded in the given encoding. | |
""" | |
def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds): | |
# Redirect output to a queue | |
self.queue = cStringIO.StringIO() | |
self.writer = csv.writer(self.queue, dialect=dialect, **kwds) | |
self.stream = f | |
self.encoder = codecs.getincrementalencoder(encoding)() | |
def writerow(self, row): | |
self.writer.writerow([s.encode("utf-8") for s in row]) | |
# Fetch UTF-8 output from the queue ... | |
data = self.queue.getvalue() | |
data = data.decode("utf-8") | |
# write to the target stream | |
self.stream.write(data) | |
# empty queue | |
self.queue.truncate(0) | |
def writerows(self, rows): | |
for row in rows: | |
self.writerow(row) | |
# Some setup | |
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8') | |
datespan = 86400 | |
currentTime = int(time.time()) | |
def mytime (i): return currentTime + datespan*i | |
def url (i): return 'http://www.justizzentrum-aachen.nrw.de/behoerde/sitzungstermine/index.php?print=1&itemsPerPage=0&startDate=' + str(mytime(i)) | |
def upperlist (xs): return [x.upper() for x in xs] | |
''' Mögliche Termine: cols[1] | |
Beweisaufnahmetermin | |
Mündliche Verhandlung | |
FT und BT | |
Termin zur mündlichen Verhandlung im vereinfachten Jugendverfahren gem. § 78 JGG | |
Gütetermin und früher erster Termin | |
Erörterungstermin | |
Kammertermin | |
Früher erster Termin | |
Beweistermin und mündliche Verhandlung | |
Haftprüfungstermin | |
Gütetermin und Termin zur mündlichen Verhandlung über den Einspruch und die Hauptsache | |
Fortsetzungstermin | |
Anhörungstermin | |
Zwangsversteigerungsverfahren | |
T (Einspr.) | |
Erörterungs-/Beweisaufnahmetermin | |
Verhandlungstermin | |
HaftprüfT | |
Verpfl. | |
Haupttermin | |
Vernehmungstermin | |
Termin zur Fortsetzung der mündlichen Verhandlung | |
Verkündungstermin | |
Verkündungstermin (Haftbefehl) | |
Güte- und Verhandlungstermin | |
Hauptverhandlungstermin | |
Gütetermin | |
''' | |
termine = upperlist([u'HaftprüfT', u'Haftprüfungstermin', u'Anhörungstermin', u'Hauptverhandlungstermin', u'Verkündungstermin', u'Kammertermin', u'Haupttermin', u'Verkündungstermin (Haftbefehl)']) | |
''' Mögliche Verfahren: cols[2] | |
Berufungsverfahren in Strafsachen | |
Strafsache vor dem Schöffengericht | |
Verfahren vor der Strafvollstreckungskammer | |
Ermittlungsverfahren | |
Zivilsache | |
Betreuungsverfahren | |
Beschlussverfahren | |
Strafsache vor der Großen Strafkammer | |
Verfahren über Unfallversicherungsrecht | |
Verfahren über die Grundsicherung für Arbeitsuchende | |
Vollstreckungsverfahren in Jugendgerichtssachen | |
Schwurgerichtsverfahren | |
Berufung in Zivilsachen | |
Verfahren über die Rentenversicherung | |
Verfahren über das Pflegeversicherungsrecht | |
Strafsache | |
Antrag außerhalb eines Verfahrens | |
Bürgerliche Rechtsstreitigkeit | |
Bewährungssache | |
Nachlassverfahren | |
Insolvenzverfahren | |
Strafbefehlsverfahren | |
Familiensache | |
Bußgeldverfahren | |
Verwaltungsrechtsstreit | |
Verfahren über das Schwerbehindertenrecht | |
''' | |
verfahren = upperlist([u'Insolvenzverfahren', u'Strafsache vor der Großen Strafkammer', u'Strafsache vor dem Schöffengericht', u'Verfahren vor der Strafvollstreckungskammer', u'Schwurgerichtsverfahren']) | |
''' Mögliche Hinweise: cols[5] | |
Nicht öffentlich | |
Termin aufgehoben | |
''' | |
hinweise = upperlist([u'']) | |
data = [] | |
misses = 0 | |
i = 0 | |
while True: | |
day = time.strftime("%a, %d.%m.%Y", time.gmtime(mytime(i))) | |
html = urllib2.urlopen(url(i)).read() | |
soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES) | |
table = soup.find('table', attrs={'id':'sitzungsTermineTable'}) | |
rows = table.findAll('tr') | |
# Loop conditions | |
i += 1 | |
if len(rows) == 2: | |
if misses == 2: # not just a weekend but end of fun | |
break | |
misses += 1 | |
continue | |
# Loop through rows | |
for j in xrange(1,len(rows) - 2): | |
cols = rows[j].findAll('td') | |
cols = [ele.text.strip() for ele in cols] | |
cols[0] = day + ', ' + cols[0] | |
# Filtering | |
if cols[1].upper() in termine and cols[2].upper() in verfahren and cols[5].upper() in hinweise: | |
data.append([ele for ele in cols if ele]) # Get rid of empty values | |
pprint(data) | |
# Put into CSV | |
f = codecs.open('landgericht_events.csv', 'w', encoding="utf-8") | |
writer = UnicodeWriter(f) | |
writer.writerows(data) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment