Better Faster Stronger
Ah sheet here we go again. Das ursprüngliche Projekt ist leider aufgrund meines Studiums ein bisschen versandet. Unterdessem habe ich mein Studium abgeschlossen und habe nun wieder Zeit mich dem Projekt 20mining zu widmen. Jedoch werde ich komplett neu beginnen. Der alte Code war hässlich die Daten wurden als Textdateien gespeichert (igitt) und der Speicher meines NAS wurde langsam knapp. Grund also das Ganzeu neu und sauber zu beginnen.
Seit dem letzten Post und jetzt ist einige Zeit vergangen und die Seite hat sich massiv verändert. Es gibt nun endlich wieder einen RSS-Feed, was das abgreifen der Artikel unglaublich erleichtert. Weiter wurde auch die Kommentierfunktion verbessert. Nutzer können sich nun gegenseitig Antworten. Das schönste an der Sache: Die Daten sind nach wie vor und gut parsbarem JSON verfügbar.
Die Motivation für das erneute starten des Projekts kam durch die neuen Features. Ich habe seit je her eine kleine hass-libe Beziehung zu der Kommentarspalte der Newsseite. Ich lese sie viel zu oft. Viel zu oft. Mit den neuen Funktionen kann ich die Kommentarspalte viel besser auswerten und hoffe auf spannende Einblicke. Seit covid19 werden die threads gefühlt gehässiger. Besonders auch auf die Abstimmung vom November bin ich gespannt wie sich Artikel und Kommentare verhalten. Intressant wäre zu erfahren ob es Bots gibt welche automatisiert Nachrichten versuchen zu verbreiten, ähnlich wie in Amerika oder ob Kommentare wie oft behauptet gelöscht werden.
Der Aufbau ist auch ein bisschen anders als beim Letzten Mal. Das ganze läuft auf Ubuntu. Dort gibt es zwei Python scripts, welche regelmässig mittels Crontab ausgeführt werden. grabber.py prüft die RSS-Seite und extrahiert die URLs der Artikel (1). Die URLs enden in der contetnID eines Artikels, diese wird für die API-Calls benötigt. Diese ID versucht das Script in die MongoDB einzufügen. Falls es den Artikel bereits gibt, springt das Script zur nächsten URL. Wenn es eine ID einfügen kann wird zusätzlich das Attribut Time mit dem aktuellen Timestamp gesetzt und die crawl(nummer) auf 0 (2). Anschliessend wird der Artikel mit der entsprechenden id via API-Call aufgerufen (3). Die JSON-Antwort des Servers wird in die Collection “Articles“ gespeichert (4). Das Zeite Script (comments.py) führt eine Query auf die “Stories” Collection aus. Dabei werden die Crawl-Ids und Zeitabstände berücksichtigt, um die Kommentare in immer grösser werdenden Zeitabständen abzugreifen (5). Dann wird für jede contentID die Kommentarseite via API-Call geladen (6). Die Kommentare werden angereichert mit den Attributen “ContentID“ (diese ist sonst nur in einer url verfügbar und erschwert das verarbeiten später), time mit dem aktuellen timestamp und crawlid, was das einfache unterscheiden und der zeitlichen Achse erleichtert. Untere Abbildung sollte fürs Verständnis helfen.