Bereiche aus HTML löschen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
emKa
User
Beiträge: 4
Registriert: Sonntag 1. Februar 2009, 17:42

Bereiche aus HTML löschen

Beitragvon emKa » Sonntag 1. Februar 2009, 17:52

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.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Beitragvon derdon » Sonntag 1. Februar 2009, 17:58

Wenn du ein POSIX-kompatibles Betriebssystem hast, dann ist sed für so ein Problem viel besser geeignet als Python.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 1. Februar 2009, 18:03

Du kannst diese Datei einfach zeilenweise durchgehen.Ich glaube dass BeautifulSoup Kommentare sowieso ignoriert, also ist es dafür eher wenig geeignet.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Beitragvon str1442 » Sonntag 1. Februar 2009, 18:09

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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Sonntag 1. Februar 2009, 18:24

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
emKa
User
Beiträge: 4
Registriert: Sonntag 1. Februar 2009, 17:42

Beitragvon emKa » Sonntag 1. Februar 2009, 21:45

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!
emKa
User
Beiträge: 4
Registriert: Sonntag 1. Februar 2009, 17:42

Beitragvon emKa » Donnerstag 5. Februar 2009, 10:15

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 5. Februar 2009, 10:26

Besser ``True`` und ``False`` verwenden.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Donnerstag 5. Februar 2009, 14:08

...und:

Code: Alles auswählen

if '<head>' in line:
MfG
HWK
emKa
User
Beiträge: 4
Registriert: Sonntag 1. Februar 2009, 17:42

Beitragvon emKa » Donnerstag 5. Februar 2009, 17:24

Danke für die Hinweise!

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder