Web scraper und Statistiker für das UnlimitedWorld.de Forum.
Linux/MacOS:
git clone https://github.com/TheCheese42/grubengeraet/
cd grubengeraet
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -r requirements.txt
Windows:
git clone https://github.com/TheCheese42/grubengeraet/
cd grubengeraet
python -m venv .venv
.venv/Scripts/activate.ps1
python -m pip install -r requirements.txt
Zuerst müssen die HTML Seiten heruntergeladen werden.
Für alle Optionen siehe python -m grubengeraet.miner -h
.
Die Standartgröße der Chunks beim parallelen Download beträgt 20. Wird sie auf 0 gesetzt (--chunk-size 0
) werden alle Seiten gleichzeitig geladen.
Beispiel:
python -m grubengeraet.miner --url https://unlimitedworld.de/threads/wer-als-letztes-antwortet-kriegt-viel-mehr-als-nur-128-dias.8439/ --threaded
Oder:
python -m grubengeraet.miner --pre-defined WALA --threaded
Die Seiten landen standartmäßig im .html_content
Verzeichnis. Sollte dieses nicht existieren, muss es manuell erstellt werden.
Durch das weglassen der --threaded
flag werden die Seiten linear, nacheinander heruntergeladen. Dies dauert bei großen Threads aber sehr lange.
Danach werden die Daten extrahiert und in einer JSON Datei gespeichert.
Für alle Optionen siehe python -m grubengeraet.extractor -h
.
Beispiel:
python -m grubengeraet.extractor --output data.json
Nun sind alle wichtigen Daten in der data.csv
Datei gesammelt.
Alternativ kann auch nur ein bestimmter Bereich analysiert werden. Dies wird mit den --pagerange
und --postrange
Funktionen erreicht. Sie müssen in Anführungszeichen übergeben werden und haben das format "start,stop,step"
, wobei stop
exklusiv und step
optional ist. Auch parallele Verarbeitung wird unterstützt mit dem --jobs
parameter.
Beispiel:
python -m grubengeraet.extractor --output data.json --pagerange "100,1001" --jobs 4
Hier werden nur Beiträge, die auf den Seiten 100 bis 1000 liegen berücksichtigt.
Zuletzt müssen die erarbeiteten Daten Visualisiert werden.
Für alle Optionen siehe python -m grubengeraet.visualizer -h
.
Beispiel:
python -m grubengeraet.visualizer --path data.json --output table.txt --format maua1_style_bbtable
Oder für Plots:
python -m grubengeraet.visualizer --path data.json --output plot.svg --format top_n_pie
Das Format des Plots passt sich der angegebenen Dateiendung an. Auch Vektor-basierte Formate wie SVG werden unterstützt.
Die Visualisierungsfunktion wird mit --format
angegeben. Dazu gibt es jeweils noch Optionen, die mit --format-options
(-fo
) angegeben werden können, im Format "arg1:value1;arg2:value2;arg3:value3"
.
Beispiel:
python -m grubengeraet.visualizer --path data.json --output plot.svg --format top_n_pie --format-options "n:20;criterion:words"
Hier werden die ersten 20 (n:20
) Autoren mit den meisten geschriebenen Wörtern (criterion:words
) in einem Kuchendiagramm dargestellt.
Gibt eine BBCode Tabelle aus, die alle Autoren mit der Anzahl Beiträgen, Regelbrüchen, sowie Prozentsatz der ungültigen Beiträge enthält.
Keine Optionen.
Gibt eine BBCode Tabelle aus, die alle Autoren mit der Anzahl Beiträgen, Regelbrüchen, sowie Prozentsatz der ungültigen Beiträge enthält, sortiert nach dem Prozentsatz der Regelbrüche, aufsteigend.
n
: Anzahl Nachrichten, die benötigt sind, um in der Tabelle aufzutauchen.
Gibt eine BBCode Tabelle aus, mit allen auftretenden Emojis sortiert nach Häufigkeit. Beachte, dass viele Forensoftwares nicht alle Unicode Emojis anzeigen können.
Ein Kuchendiagramm, das die Top n Autoren darstellt, entweder anhand von Beiträgen oder Wörtern.
n
: Anzahl Personen, die dargestellt werden sollen.
criterion
: messages
oder words
.
radius
: Radius des Diagramms.
Ein horizontales Balkendiagramm pro Jahr, zeigt die Top Autoren in Sachen Beiträge oder Wörter.
n
: Anzahl Personen, die dargestellt werden sollen.
criterion
: messages
oder words
.
Kuchendiagramm, das die Top n Emojis anhand ihrer Häufigkeit angibt.
n
: Anzahl gezeigter Emojis.
Balkendiagramm mit den Top n Emoji-Autoren, und welche Emojis diese wie oft verwendet haben.
n
: Anzahl Personen, die dargestellt werden sollen.
n_emojis
: Anzahl Emojis, die in der Legende angezeigt werden sollen.
Horizontales Balkendiagramm, das die Top n meist gepingten Forennutzer zeigt.
n
: Anzahl Personen, die dargestellt werden sollen.
Horizontales Balkendiagramm, das die Top n Autoren mit den meisten Pings zeigt.
n
: Anzahl Personen, die dargestellt werden sollen.
Horizontales Balkendiagramm, das die Top n meist zitierten Forennutzer zeigt.
n
: Anzahl Personen, die dargestellt werden sollen.
Horizontales Balkendiagramm, das die Top n Autoren mit den meisten Zitaten zeigt.
n
: Anzahl Personen, die dargestellt werden sollen.
Liniendiagramm, mit dem ein Trend visualisiert wird. Es wird vorhergesagt, wann ein besagtes Ziel erreicht wird, anhand eines gewissen Zeitraums.
goal
: Das Ziel an Beiträgen (z.B. 25000). (Pflicht)
data_period_start
: Der Beginn des Zeitraums. (Pflicht)
data_period_end
: Das Ende des Zeitraums. (Pflicht)
data_period_type
: Was die oberen beiden Parameter angeben. Eins von post
, page
oder timestamp
. (Pflicht)
description
: Eine Beschreibung, die an den Titel angehängt werden soll (z.B. (anhand der letzten 30 Tage)
).
Vertikales Balkendiagramm, das die Anzahl verschiedener Teilnehmer eines Threads pro Jahr darstellt.
Vertikales Balkendiagramm, das die Anzahl Nachrichten pro Teilnehmer pro Jahr darstellt.
Horizontales Balkendiagramm, das die Top n Autoren in Sachen Wörter pro Beitrag darstellt.
n
: Anzahl Autoren, die dargestellt werden sollen.
Horizontales Balkendiagramm, das Zeichen sortiert nach Häufigkeit angibt.
mode
: Wie soll gezählt werden: count_all
- Einfach alle Zeichen, die in Wörtern vorkommen (Satzzeichen sind hier normal nicht dabei), zählen. count_first
- Alle Zeichen am Wortanfang zählen. count_last
- Alle Zeichen am Wortende zählen. Standartmäßig count_all
.
chars
: Ein string aller Charaktere, die gezählt werden sollen. Standartmäßig a-z, sowie äöüß.
case_insensitive
: Ob Groß- und Kleinbuchstaben getrennt gezählt werden sollen. Standartmäßig True.