Samstag, 2. Februar 2013

Indexseite aufbessern

Manchmal macht man sich etwas zu viel Arbeit. Die index-Seite fand ich zu umständlich, weil ich nicht direkt einzelne Buchstaben ansteuern konnte, sondern erst einmal scrollen musste. Ich habe mir überlegt die einzelnen Überschriften mit einem Anker zu versehen, um sie ansteuern zu können. SELFHTML hat hier geholfen, weil hier die projektinternen Anker vorgestellt werden.

Im Kern muss man eine Überschrift oder einen Text auf der Seite mit einem Anker der Form

<a name="NAME_DES_ANKERS">TEXT_ZUM_ANKER</a>

versehen, den man anschließend direkt ansteuern kann und zwar in der Form:

http://www...de/seite.html#NAME_DES_ANKERS

Ich habe jetzt für meine Indexseite einen Parser erstellt, der auf den Seiteninhalt in einer Textdatei zugreift und die Seite um die Anker ergänzt. Schöner wäre sicherlich, wenn das Skript direkt auf die Indexseite zugreifen und die nötigen Änderungen dort direkt vornehmen und speichern könnte.

Das Skript in der aktuellen Fassung:
liste = []
item = ""

with open("indexseite.txt") as f:

    for line in f:


        if item != "":
            line = item + line
            liste.append(line.replace("\n",""))
            item = ""
            
        elif line.startswith("<h2>"):
            item = line
            
        else:
            liste.append(line.replace("\n",""))


for item in liste:

    if item.startswith("<h2>"):
        ''' da soll ein Anker rein!
        http://de.selfhtml.org/html/verweise/projektintern.htm#anker
        z. B.

        <h2><a name="kapitel2">Kapitel 2</a></h2>

        also Element zwischen den h2-Tags ermitteln
        und daraus den Anker basteln...
        
        '''

        # <h2>Ziel</h2>
        ziel = item.rsplit("<")
        # ['', 'h2>A', '/h2>']
        ziel = ziel[1].split(">")
        # ['h2', 'A']
        ziel = ziel[1]
        # 'A'
        zeile = '<h2><a name="{0}">{0}</a></h2>\n'.format(ziel)
        
    else:
        zeile = item + "\n"

    with open("zieldatei.txt","a") as g:
            print(zeile)
            g.write(zeile)
Das Skript funktioniert und speichert in die zieldatei.txt die gewünschten Inhalte. Ein weiteres Skript erzeugt ein Inhaltsverzeichnis, das ich oben auf der Seite einfügen kann. Da bereits alle Buchstaben angelegt sind, muss ich nicht erst prüfen, ob die Buchstaben auf der Seite vorhanden sind.
import string


def inhaltsverzeichnis_erzeugen():
    ''' Die Links haben die Form
    http://pixewakb.blogspot.de/p/index.html#C

    '''

    abc = string.ascii_uppercase
    url = '{0}'
    
    for a in abc:
        
        print(url.format(a), end=" • " if not a == abc[-1] else "")


inhaltsverzeichnis_erzeugen()
Wünschenswert wäre noch ein Zurücklink bei jedem Anker, aber erst einmal läuft das so.

Nachtrag 2. Februar 2013


Ich habe gerade manuell einen Anker auf der Seite ergänzt und die Links in den Überschriften dahingehend angepasst, dass die Links jetzt auf diesen Seitenkopf-Anker verweisen. Anscheinend ändert blogger.com die Links der Anker auf die Blog-ID um, was zu Fehlern führt. Das Skript müsste das noch beachten...

Keine Kommentare:

Kommentar veröffentlichen