Von HTML-Tag zu HTML-Tag herausschreiben

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.
Antworten
michel

Freitag 20. Mai 2005, 09:01

Guten tag

ich möchte ein Skript machen das es mir ermöglicht eine HTML-Datei zu scannen, wobei ich nur den Teil zwischen zwei HTML-Tag-s angezeigt haben möchte...zB von <titles> bis </titles> oder von <Body> bis </body>, diesen Teil möchte ich dann mit einem anderen Block ersetzen können,fertig!

wie könnte ich das realisieren? Ich arbeite dabei indem ich Zeile für Zeile scanne, ist das richtig so? oder muss ich die ganze Datei irgendwie reinsaugen und dann die Bedingung durchlaufen lassen ?

Danke für die Hilfe
Michel Koller
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 20. Mai 2005, 10:48

Wenn du wirklich nur den Titel und den Body haben willst, würde ich es mit RE machen. Wenn du ander Sachen haben willst such im Forum mal nach SGMLParser

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 20. Mai 2005, 21:27

michel hat geschrieben:... wobei ich nur den Teil zwischen zwei HTML-Tag-s angezeigt haben möchte...zB von <titles> bis </titles> oder von <Body> bis </body>, diesen Teil möchte ich dann mit einem anderen Block ersetzen können,fertig!
Hi Michel!

Das "re"-Modul ist dein Freund.

Hier ein Beispiel mit Ersetzung:
http://www.python-forum.de/viewtopic.php?p=18920#18920
Vorher noch ein "import re" hin und schon kann es los gehen.

Den Titel zu ersetzen würde so aussehen:

Code: Alles auswählen

import re

ersatztitel = "Das ist der neue Titel"

htmlstring = \
"""<html>
<head>
   <title>
      Das ist der alte Titel
   </title>
</head>
<body>
   <p>
      Irgendein Text...
   </p>
</body>
</html>
"""

re_obj = re.compile("<title>(.*?)</title>", re.M | re.I | re.S)
ergebnis = re_obj.sub("<title>%s</title>" % ersatztitel, htmlstring)
print ergebnis
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Sonntag 22. Mai 2005, 12:20

gerold hat geschrieben:

Code: Alles auswählen

re_obj = re.compile("<title>(.*?)</title>", re.M | re.I | re.S)
ergebnis = re_obj.sub("<title>%s</title>" % ersatztitel, htmlstring)
print ergebnis
Oder noch einfacher:

Code: Alles auswählen

import re
ergebnis = re.sub("<title>(.*?)</title>(?uism)", htmlstring)
print ergebnis
TUFKAB – the user formerly known as blackbird
Olliminatore
User
Beiträge: 55
Registriert: Montag 30. Mai 2005, 16:03
Wohnort: schönsten Stadt Deutschlands
Kontaktdaten:

Mittwoch 8. Juni 2005, 13:22

Ist zwar schon ein Weilchen her, aber ich bin grad beim suchen über dieses Modul hier BeautifulSoup gestolpert.
Für die, die nicht nochmal alles selber schreiben wollen. :Pl
[size=84][url=http://de.wikipedia.org/wiki/Jamba]Love Jamba[/url] <!--Olliminatore-->input<?/> [url=http://www.spreeblick.com/blog/index.php?p=324]Boycott Jamba[/url][code]def olliminiert(optimiert, eliminiert, terminiert):[/code][/size]
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 8. Juni 2005, 13:33

Also das Beispiel bei der Dokumentation zeigt schon ziemlich die Einfachheit des ganzen: http://www.crummy.com/software/Beautifu ... ation.html

Echt ein super Tipp!

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten