aufgabe_8
index
sourcecode/aufgabe_8.py
sourcecode/prettycode/aufgabe_8.html

#-*- coding: UTF-8 -*-
#
# Aufgabe 8: WikiStrukturWrapper
# Author: Matthias Rebel, 731220

 
Modules
       
BeautifulSoup
re
urllib2

 
Functions
       
getFiles(SoupString)
schreibt die Ergebnisse aus dem Quelltextbereich in eine Liste: für Dateien
getPages(SoupString)
schreibt die Ergebnisse aus dem Quelltextbereich in eine Liste: für Seiten
getSubcats(SoupString, catIndex)
schreibt die Ergebnisse aus dem Quelltextbereich in eine Liste: für Unterkategorien
getWikiPage(url)
opens an url and returns its html-sourcecode
initialStep()
Die Startseite wird aufgerufen und sowohl die Seiten als auch die Unterkategorien
der Hauptkategorie/Startseite werden in dieser Funktion ermittelt. (der Übersichlichkeit halber
wird das in einer Art Vorstufe gemacht)
Am Ende wird start_recursive_wrapper(mit der Liste der Unterkategorien) aufgerufen.
parse_info_for_next_step(info)
die aktulle category 'enthält X Unterkategorie(n), Y Seite(n) und Z Datei(en) 
r'enthält (.*?) Unterkat\w+, (.*?) Seit\w+ und (.*?) Dat\w+'
prettyfyFiles(files)
wandelt die Ergebnisliste in einen String für die AusgabeDatei
prettyfyPages(pages)
wandelt die Ergebnisliste in einen String für die AusgabeDatei
prettyfySubcatListe(subcats)
wandelt die Ergebnisliste in einen String für die AusgabeDatei
start_recursive_wrapper(subcats)
Diese Funktion beinhaltet lediglich eine while-Schleife, die jede Unterkategorie
an den wrapper(catIndex,category,addUrl,info) schickt, bis die Liste der Unterkategorien
und jede Liste dieser Unterkategorien ... abgearbeitet ist. 
Das passiert entweder nie, da das wiki reagiert und man in eine Schleife gerät
(s. u. Angriff1 - Auswertung) oder die Länge des catIndex wird restringiert.
wrapper(catIndex, category, url, info)
Der wrapper(catIndex,category,url,info) :)  
Eine Kategorie besteht aus Unterkategorien, Seiten und/oder Dateien. 
Unterkategorien sind Töchter; Seiten & Dateien sind Terminale
 
Im Wert info stehen die aus dem Quelltext extrahierten Informationen zu jeder Kategorie. 
Dieser String wird in nextStep analysiert und sagt dem wrapper ob er nach dateien, seiten 
und/oder unterkategorien suchen soll. 
Der bereits erwähnt Restriktor steuert die Analysetiefe, anhand der Länge von catIndex.
Beispiel: catIndex = 1_25_1_18, len(catIndex) = 8. if len(catIndex) < restrictor ...
 
BigError: Wenn der htmlcode nicht verarbeitet werden kann, (d.h. die funktion erwartet X Seiten, 
aber sie können nicht aus dem htmlcode extrahiert werden oder sie sind über mehrere Seiten der
aktuellen Seite verteilt, dieser Fall wird von meinem Skript nicht berücksichtigt) dann wird 
der letzte Schritt wiederholt, das führt zu doppelter UnterkategorieAnalyse und somit 
zu doppelten Einträgen der aktuellen Unterkategorie, was durch try/except und ein unterkategorienDict 
verhindert wird.

 
Demonstration
        localhost:sourcecode matthiasrebel$ python aufgabe_8.py
1_1 Wikipedia:
1_1_1 Wikipedia:Adminkandidaturen
1_1_2 Wikipedia:Archiv
1_1_3 Begriffsklärung
1_1_4 Wikipedia:Benutzerevaluation
1_1_5 Wikipedia:Bewertung
1_1_5_1 Wikipedia:Bewertete Seite
1_1_5_1_1 Wikipedia:Exzellent
1_1_5_1_2 Wikipedia:Exzellent Gesprochene Artikel
1_1_5_1_3 Wikipedia:Exzellentes Bild
1_1_5_1_4 Wikipedia:Informativ
1_1_5_1_5 Wikipedia:Lesenswert
1_1_5_2 Vorlage:Bewertungsbaustein
1_1_5_3 Wikipedia:Kandidat Exzellenter Artikel
1_1_5_4 Wikipedia:Kandidat Informativ
1_1_5_5 Wikipedia:Kandidat Lesenswerter Artikel
1_1_6 Wikipedia:Bilder ...

 
Angriff1 - Auswertung
        # DateiPfade: 4.36 a.m. (0 MB) bis 11.16 a.m. (61,4 MB), sinnvolle Daten: 632 KB

#1_1_12_10_9 Benutzer nach Schriftkenntnis 1_1_12_10_9_1 User Arab, ... 1_1_12_10_9_14 User Sütterlin

#1_1_12_10_9_8 User Hira 1_1_12_10_9_8_1 User Hrkt (Zeile 3573)

#1_1_12_10_9_8_1 User Hrkt 1_1_12_10_9_8_1_1 User Hrkt ... (bis Zeile 63917)


# DateiTerminale: 4.36 a.m. (0 MB) bis 11.16 a.m. (25,5 MB), sinnvolle Daten: 4,6 MB

#1_1_12_10_9_7 User Hebr Benutzer:Blueduck4711, Benutzer:Drache-vom-Grill, Benutzer:MaDav, Benutzer:Prior

#1_1_12_10_9_8 User Hira Benutzer:TheVi (Zeile 19147)

#1_1_12_10_9_8_1 User Hrkt Benutzer:Hokanomono, Benutzer:Mkastner, Benutzer:ValariaMoonflower

#1_1_12_10_9_8_1_1 User Hrkt Benutzer:Hokanomono, Benutzer:Mkastner, Benutzer:ValariaMoonflower

#1_1_12_10_9_8_1_1_1 User Hrkt Benutzer:Hokanomono, Benutzer:Mkastner, Benutzer:ValariaMoonflower ... (bis Zeile 65037)

Fazit: Die Analysetiefe muss einzuschränken sein.

 
Output with restrictor = int(9)
        sourcecode/aufgabe_8_output/DateiPfade
sourcecode/aufgabe_8_output/DateiTerminale
sourcecode/aufgabe_8_output/ErrorLog