HTML auswerten mit tidy
HTMLs lassen sich mit tidy und Standardwerkzeugen einfach bearbeiten.
Chef/Kunde/Kollegen: “Sag mir mal wie viele wir von X haben.” Diese Frage kommt in letzter Zeit, da wir in Mitten in der Analyse unserer Systeme sind. X kann dabei html-, pdf-, … -Dateien, 404er, ungültige Links, Nutzer, Zugriffe auf ….
Heute: Die Anzahl der aktiven Seiten eines Bereiches in unserem Intranet.
Aktive Seiten? Was ist aktiv? Unsere Plattform hat mehr als eine Quelle für Inhalte, HTML können an Navigationsknoten sein aber auch nicht. Sie können aber auch ohne Berechtigungen veröffentlicht sein, sind Sie dann aktiv? Der heutige Kompromis, da die Zahlen gestern benötigt waren, Auswertung der Sitemap für einen anonymen User.
Die Sitemap ist ein Einzler, aber enthält ungeordnete Listen mit den Navigationsknoten. Die Lösung soll in einem wohlgeordneten HTML die Navigationsknoten extrahieren, sodass pro Zeile genau einer ist, dann muss nur noch der relevante Teil ausgeschnitten und gezählt werden.
Das HTML bekommt man mit tidy wunderbar wieder in Form, die Navigationsknoten haben einen onClick Event und können dadurch erkannt werden, überflüssiges HTML wird entfernt, Bereich wird ausgeschnitten und die Zeilen gezählt.
tidy -iq -omit -utf8 -wrap 9999999 sitemap.html > sitemap.tidy
sed -n "/toggle/s/<strong.*\">//p" sitemap.tidy | cut -d "<" -f1 > sitemap.list
awk '/^Reisen/,/^Marktplatz/' sitemap.list
whitespace=$(($(head -1 sitemap.list | grep -oP '^\s+' | wc -c) - 1)) && gsed -i "s/^\s\{$whitespace\}//" sitemap.list
awk '/^Reisen/,/^Marktplatz/' sitemap.list | sed '$d'
Nach dem tidy sind die einzelnen Zeilen zwar sauber durch Leerzeichen eingerückt, aber die erste Zeile ist noch auch noch eingerückt. Diese werden in Variablen $whitespace gezählt und per sed entfernt.