Skip to content

Instantly share code, notes, and snippets.

@kasnder
Created May 13, 2018 21:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kasnder/d6cb953da52286d986b8fe8f50545f00 to your computer and use it in GitHub Desktop.
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.
#!/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