J'essaie de convertir une page HTML en une arborescence. J'ai tiré cette classe (j'ai enlevé ce que je fais en fait avec chaque balise car il est pas pertinent):Comment gérer un élément HTML vide sans la barre oblique?
class PageParser(html.parser.HTMLParser):
def handle_starttag(self, tag, attrs):
print("start "+tag)
def handle_endtag(self, tag):
print("end "+tag)
def handle_startendtag(self, tag, attrs):
print("startend "+tag)
Je me attendais éléments vides pour déclencher la méthode handle_startendtag
. Le problème est que lorsque vous rencontrez un élément vide comme <meta>
, seule la méthode handle_starttag
est appelée. La balise est jamais fermée de ma classe point de vue:
parser = PageParser()
parser.feed('<div> <meta charset="utf-8"> </div>')
impressions:
start div
start meta
end div
je dois savoir quand chaque élément a été fermé pour créer correctement l'arbre. Comment puis-je savoir si un tag est un élément vide?
De les docs: _ "Cet analyseur ne vérifie pas que les balises de fin correspondent aux balises de début ou d'appel le gestionnaire de balise de fin pour les éléments qui sont fermés implicitement en fermant un élément externe. "_ https://docs.python.org/3/library/html.parser.html – Hamish
Vous devez entrer le code XML strict où le' 'tag n'est plus valide et vous devez l'écrire comme' 'ou garder une trace d'une liste d'étiquettes qui pourraient venir comme des étiquettes vides, comme les'
'ou les' 'tags. –
http://stackoverflow.com/questions/3115448/best-way-to-convert-the-this-html-file-into-an-xml-file-using-python –