Coder Social home page Coder Social logo

cologne-ris-scraper's People

Contributors

catoth avatar marians avatar stefanw avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

cologne-ris-scraper's Issues

Schwerer Fehler beim Scrapen: Keine Verbindung zwischen Dokumenten und Attachments

Aus noch unklaren Gründen werden Dokumente und Attachments beim Scrapen nicht mehr mit einander verbunden.

Beispiel:

http://offeneskoeln.de/api/documents?reference=AN%2F1840%2F2012&output=consultations%2Cattachments

Hier fehlt die eigentlich obligatorische Ausgabe von Attachments.

Die benötigten Datensätze in der attachment-Tabelle werden aktuell in einigen Fällen nicht angelegt.

Beispiel: attachment_id=383150

Der dazugehörige Eintrag in submissions2attachments wird jedoch angelegt.

*.asp vs *.php

Schwerin setzt unter http://bis.schwerin.de auch den Sessiondienst ein. Allerdings auf PHP Basis. Es sollte im Scraper die Option geben ob asp oder php Dateien abgerufen werden.

Dateien werden nur einmal geladen

PDFs und andere Anlagen werden bislang vom Scraper nur einmal geladen.

Tatsächlich können sich die Dokumente aber immer wieder ändern. Daher müssen wir einen Weg finden, wie die Dokumente mehrmals (aber nicht zu oft) abgerufen werden. Der Vergleich mit der lokalen Kopie kann über Dateigröße und dann Prüfsumme erfolgen. Erst nach der Prüfung, wenn die neue Version aktueller ist, sollte die lokale Kopie ausgetauscht werden.

Beratungsfolge wird nicht erfasst, sollte über Vorlagen-Detailseite gescraped werden

Bei manchen Dokumenten werden keine Tagesordnungspunkte (agendaitems) angelegt, obwohl die Dokumente in Sitzungen vorgelegt wurden.

Beispiel: http://offeneskoeln.de/dokumente/0413-2012/

Bei anderen Dokumenten wird zwar die Sitzung erfasst, aber Dokumente werden dem falschen Tagesordnungspunkt zugeordnet.

Die Beratungsfolge sollte über die Vorlagen-Detailseite erfasst werden. Beispiel:

http://ratsinformation.stadt-koeln.de/vo0050.asp?__kvonr=32312&voselect=9576

Dabei ist dafür zu sorgen, dass alle referenzierten Objekte (agendaitems, sessions) angelegt werden müssen. Dies erfordert ggf. das Scrapen der jeweiligen verlinkten Seiten.

Im Code findet sich ein Anfang zum Auslesen der Beratungsfolge, getrennt in zwei Teile: Zukünftig und vergangen. Siehe Debugging-Ausgaben "Beratungsfolge Zukunft" bzw. "Beratungsfolge Vergangenheit". Der Scraper arbeitet an der Stelle noch sehr unsauber.

Die benötigten Einträge in agendaitems2submissions und agendaitems2requests werden aktuell GAR NICHT erstellt.

Geladenen Dokumententyp verifizieren

Wenn ein Attachment herunter geladen wird, kommt es in einzelnen Fällen dazu, dass statt dem erwarteten PDF eine Fehlermeldung vom Typ text/html ausgegeben wird.

Vor dem Ablegen des Attachments sollte noch mal überprüft werden, ob die Datei tatsächlich den erwarteten Inhaltstyp hat. Dazu können beispielsweise die filteutils genutzt werden.

Attachments werden nur neu geladen, wenn sie noch nicht geladen wurden

Die Funktion get_attachments() lädt nur diese Attachments, die noch nicht in der Datenbank eingetragen sind. Es wird nicht überprüft, ob die dazu gehörige Datei (noch) vorhanden ist oder ob sie vielleicht verändert wurde.

Prüfen, ob sich eine Datei verändert hat, kann man nur durch Abgleich von Dateigröße bzw. Prüfsumme. Das bedeutet, man müsste dafür den Anhang ein weiteres Mal herunter laden, um ihn abgleichen zu können. (Der Kölner RIS-Server sendet (IMHO) weder einen Content-Length Response Header, noch einen Last-Modified.

Damit empfiehlt sich dieser Modus nicht für die regelmäßigen Durchgänge, sondern nur für seltenere, gründlichere Scraper-Durchgänge.

OCR zur Texterkennung

Zur Extraktion des Inhalts von PDF Dokumenten wird pdftotext genutzt. Das funktioniert bei den meisten Dokumenten ausgezeichnet. Im Schweriner BIS finden sich aber auch PDFs mit gescannten Inhalten. Diese können durch pdftotext nicht extrahiert werden. Eventuell kann eine freie OCR Software für diese Fälle genutzt werden.

Abbruch in get_session_details(): 'NoneType' object is unsubscriptable

Dieser Fehler bringt den Scraper aktuell zum Ausstieg:

Lade Sitzung 10560 http://ratsinformation.stadt-koeln.de/to0040.asp?__ksinr=10560
Traceback (most recent call last):
  File "scrape.py", line 880, in <module>
    scrape_sessions(years, months)
  File "scrape.py", line 791, in scrape_sessions
    get_session_details(session_id)
  File "scrape.py", line 150, in get_session_details
    if date_time['datum'] is not None:
TypeError: 'NoneType' object is unsubscriptable

Könnte es am Komma am Ende des Datums liegen?

Modus zum schnellen, häufigen Scrapen von neuen Inhalten

Der Scraper sollte einen Modus bieten, der das möglichst schnelle Hinzufügen von neuen Inhalten unterstützt. Attachments, die bereits vorhanden sind, sollten dabei nicht erneut herunter geladen und verglichen werden.

Anders als bei der bisherigen Vorgehensweise geht es dabei nicht um Vollständigkeit.

Das Vorgehen könnte so aussehen:

  • Auslesen aller Sitzungen aus dem Sitzungskalender für die letzten 30 und die nächsten 30 Tage.
  • Hinzufügen bisher noch nicht vorhandener Sitzungen
  • Hinzufügen bisher noch nicht vorhandener Tagesordnungspunkte
  • Hinzufügen bisher noch nicht vorhandener Vorlagen (aus bereits vorhandenen und neuen Sitzungen)
  • Hinzufügen bisher noch nicht vorhandener Attachments

Anhangs-Dateityp TIF etc. wird nicht erkannt

Beim Speichern des Dateityps einer Anlage wird der vom Server gesendete Mime-Type verwendet. Der Server sendet bei TIFF-Dateien beispielsweise application/octet-stream.

Statt die Angabe des Servers zu verwenden, sollte vor dem Speichern jede Datei mit file überprüft werden. Dadurch wird der Mime-Type zuverlässiger ermittelt.

Datums-Felder bei Dokumenten mit fehlendem Datum ergänzen

Durch den Fehler im Datums-Parsing sind einige Dokument ohne Datum.

Dies sind die betroffenen submission_ids aus Tabelle submissions (142 Zeilen):

21682
27305
27351
27246
27307
27177
27219
27284
27253
27322
27398
27443
27426
27461
27468
27090
27104
27097
27364
27250
27447
27319
27405
27334
27222
27217
27215
27207
27283
27272
27365
27371
27198
27066
27241
27450
27312
27331
27415
27393
27395
27418
27218
27440
27458
27202
27394
27243
27469
27147
27430
27348
27052
27162
27191
27139
27142
27229
27386
27423
27384
27259
27396
27085
27414
27313
27071
27170
27088
27228
27073
27268
27406
27463
27439
27287
27389
27297
27320
27409
27163
27315
27464
27201
27258
27456
27475
27277
27433
27338
27213
27455
27335
27408
27442
27067
27150
27233
27465
27460
27382
27435
27293
27324
27280
27457
27400
27137
27362
27413
27346
27436
27473
27466
27151
27342
27424
27416
27106
27330
27375
27355
27339
27397
27452
27169
27444
27298
27158
27060
27419
27420
27421
27144
27399
27383
27470
27474
27309
27336
27353
395371

Und hier die 85 betroffenen Zeilen aus requests (Feld request_id):

8933
8936
8937
8941
8969
8970
9003
9004
9006
8934
8935
8938
8940
8942
8943
8944
8948
8954
8955
9067
8890
8939
9062
8903
9005
8961
9010
9007
8998
8962
9011
9009
9000
8891
8986
8974
9008
8990
8997
9001
8989
8949
8993
8984
8985
9040
9041
9042
9043
9044
9045
9046
9049
9047
8994
9017
9019
9028
9029
9020
9021
9022
9033
9034
9037
9065
9025
9018
9030
9026
9038
9039
9036
9032
9024
9031
9035
9023
8977
8975
9050
8988
8905
9048
9063

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.