Seite 1 von 1

Bereiche aus HTML löschen

Verfasst: Sonntag 1. Februar 2009, 17:52
von emKa
Hallo!

Ich stehe vor folgendem Problem. Ich muss aus einer HTML-Datei bestimmte Bereiche löschen und die HTML-Datei wieder neu abspeichern. Die Bereiche, die aus der HTML-Datei entfernt werden müssen, werden über Kommentar-Tags definiert.

Beispiel:

Code: Alles auswählen

<HTML>
…
<!-- beginn löschen -->
In diesem Bereich soll alles gelöscht werden.
<!-- ende löschen -->
…
</HTML>
Das Laden und Speichern bereitet mir keine Probleme. Nur das Löschen der Bereiche. Es gibt dafür bestimmt mehrere Lösungsansätze. Ich habe auch schon ein wenig mit BaeutifulSoap herum probiert, aber es nicht hinbekommen.

Für Tipps wäre ich sehr dankbar.

Verfasst: Sonntag 1. Februar 2009, 17:58
von derdon
Wenn du ein POSIX-kompatibles Betriebssystem hast, dann ist sed für so ein Problem viel besser geeignet als Python.

Verfasst: Sonntag 1. Februar 2009, 18:03
von Leonidas
Du kannst diese Datei einfach zeilenweise durchgehen.Ich glaube dass BeautifulSoup Kommentare sowieso ignoriert, also ist es dafür eher wenig geeignet.

Verfasst: Sonntag 1. Februar 2009, 18:09
von str1442

Code: Alles auswählen

from contextlib import nested

with nested(open("datei.html", "rb"), open("neu.html", "wb")) as (read, write):
    exclude = False
    for line in read:
        if line.strip(" \n") == "<!-- beginn löschen -->":
            exclude = True
        elif line.strip(" \n") == "<!-- ende löschen -->":
            exclude = False
        if not exclude:
            write.write(line)
Nicht getestet.

Verfasst: Sonntag 1. Februar 2009, 18:24
von sma
Ich würde es erst einmal so versuchen:

Code: Alles auswählen

with open(htmlfile, "rb") as f: html = f.read()
re.sub(r"(?s)<!-- beginn löschen -->.*?<!-- ende löschen -->", "", html)
with open(htmlfile, "wb") as f: f.write(html)
Spaßig werden die Umlaute. Ist die HTML-Datei wirklich im ISO-8859-1-Format wie vorgeschrieben? Ist es XHTML im UTF-8-Format? Ein anderes Format? Auch das Encoding der Python-Datei ist wichtig, wenn der Umlaut nicht falsch interpretiert werden soll. Ich hätte daher die Kommentare auf ASCII-Zeichen beschränkt.

Stefan

Verfasst: Sonntag 1. Februar 2009, 21:45
von emKa
Danke für die raschen Antworten!

Dass ich mit BeautifulSoap auf dem falschen Dampfer bin habe ich gemerkt. Die zwei Beispiele haben auf an Hieb nicht geklappt, aber ich weiß jetzt in welche Richtung ich jetzt gehen muss. Ich werde mich in den nächsten Tagen genauer damit befassen.

@sma <!-- beginn löschen --> ist nur ein Beispiel. Mit Umlauten wäre es bestimmt lustig geworden ;-)

Nochmals, vielen Dank an alle!

Verfasst: Donnerstag 5. Februar 2009, 10:15
von emKa
Nach langem hin und her habe ich eine Lösung gefunden.

In diesem Beispiel wird der gesamte Bereich zwischen <head> und </head> inkl. den Tags entfernt und anschließend wird die neue Datei als neu.html gespeichert.

Code: Alles auswählen

quelle = open("index.html", "r")
ziel = open("neu.html", "w")
exclude = 0
for line in quelle:
  if line.find("<head>") != -1:
    exclude = 1
  if exclude == 0:
    ziel.write(line)
  if line.find("</head>") != -1:
    exclude = 0

Verfasst: Donnerstag 5. Februar 2009, 10:26
von Leonidas
Besser ``True`` und ``False`` verwenden.

Verfasst: Donnerstag 5. Februar 2009, 14:08
von HWK
...und:

Code: Alles auswählen

if '<head>' in line:
MfG
HWK

Verfasst: Donnerstag 5. Februar 2009, 17:24
von emKa
Danke für die Hinweise!