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
Verfasst: Donnerstag 5. Februar 2009, 17:24
von emKa
Danke für die Hinweise!