HTML File nach bestimmten Tags greppen

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.
Benutzeravatar
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Beitragvon ms4py » Donnerstag 19. Februar 2009, 00:52

Leonidas hat geschrieben:Der Umweg über den XML-Parser ist IMHO recht aufwending


Warum?

Code: Alles auswählen

from xml.dom import minidom as dom
import os
os.system("tidy -asxhtml -numeric < index.html > index.xml")
parsed_xml = dom.parse("index.xml")
lunar

Beitragvon lunar » Donnerstag 19. Februar 2009, 00:59

Klasse, du hast gezeigt, wie man os.system missbrauchen und aus einer Datei einen MiniDOM-Baum erzeugen kann ... ;)

Wie wäre es mal, wenn du mal versuchst, zu demonstrieren, wie man mit minidom nach einem Element mit einer bestimmten Klasse sucht und dessen HTML-Inhalt durch etwas anderes ersetzt? Dann merkst du wohl selbst, was Leonidas gemeint hat ;)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Donnerstag 19. Februar 2009, 01:05

ice2k3 hat geschrieben:
Leonidas hat geschrieben:Der Umweg über den XML-Parser ist IMHO recht aufwending


Warum?

Weil der rechnerische Aufwand, die Datei erstmal auf die Festplatte zu speichern, dann tidy zu suchen und zu starten, damit das erstmal das HTML parst und wieder XML auf die Platte schreibt was dann wiederrum vom Python-Prozess gelesen wird größer ist als html5lib zu machen, was genau das gleiche wie tidy macht, aber ohne den umweg über die Festplatte, dafür aber mit einer vergleichsweise angenehmen Python-API. Und dort bekommt man entweder Minidom, ElementTree oder lxml-ElementTree heraus, zudem parst es nach den Regeln von HTML5, also eigentlich genauso wie Browser es auch machen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Beitragvon bankkind » Mittwoch 25. Februar 2009, 18:39

Da ich es bisher noch nicht hinekommen habe, ist mir eine vorläufige andere Lösung eingefallen... Ich könnte ja den gesamten HTML Code in die Mail kopieren und dann absenden.

Leider funktioniert das auch nicht, weil ich dann folgenden Fehler bekomme:

Code: Alles auswählen

smtplib.SMTP Data Error: (500, 'line limit exceeded')


Ich nehme mal an, das irgend eine Zeile zu lang ist für SMTP.

Wie kann ich das steuern, das er bestimmte Zeileumbrüche einbaut?

Ich habe bereits \n nach jeder Zeile in die Variable gesetzt, aber dennoch kommt der Fehler.
BlackJack

Beitragvon BlackJack » Mittwoch 25. Februar 2009, 21:26

@bankkind: Das ist eine Antwort vom Server, den Du zum Versenden verwendest. Der findet die Mail hat zu viele Zeilen.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder