html5lib, ElementTree...

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
__marcus__
User
Beiträge: 92
Registriert: Mittwoch 10. September 2008, 22:10
Wohnort: Hamburg

Freitag 12. September 2008, 10:57

Hm, ja, ich bin da wohl ein wenig begriffsstutzig...

Code: Alles auswählen

import html5lib
from html5lib import treebuilders
from xml.etree import cElementTree

f = open("spiegel.html")
parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("etree", cElementTree))
document = parser.parse(f)
Was muss ich denn jetzt z.B. machen, um mir einfach mal alle Elemente der Website anzuschauen?
Zuletzt geändert von __marcus__ am Freitag 12. September 2008, 12:23, insgesamt 1-mal geändert.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 12. September 2008, 11:16

__marcus__ hat geschrieben:Was muss ich denn jetzt z.B. machen, um mir einfach mal alle Elemente der Website anzuschauen?
Was meinst du? Das XML ausgeben?

P.S: Deine Frage ist nicht html5lib-spezifisch sondern bezieht sich eher auf ElementTree.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
__marcus__
User
Beiträge: 92
Registriert: Mittwoch 10. September 2008, 22:10
Wohnort: Hamburg

Freitag 12. September 2008, 12:29

OK, hab den Titel mal geändert.

Auf jeden Fall steht im Manual z.B.

findall(path)

Finds all toplevel elements with the given tag. Same as getroot().findall(path). path is the element to look for.

Returns:
A list or iterator containing all matching elements, in section order.

Häng ich oben aber z.B.

Code: Alles auswählen

print document.findall('div')
an bekomme ich nur eine leere Liste.

Falls also jemand Beispielcode hat, wo mit html5lib HTML auseinandergenommen wird, wäre ich sehr dankbar.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 12. September 2008, 13:00

__marcus__ hat geschrieben:

Code: Alles auswählen

print document.findall('div')
Ja, das wäre als CSS-Selektor durchgegangen. Die unterstützt ET aber nicht, das ist lxml vorbehalten. Siehe hier, was ET so kann. Bei dir ist <html> das Wurzelelement und es hat kein <div> als Kind, sondern <head> und <body>, daher wird kein <div> gefunden.

Um das <div> zu bekommen:

Code: Alles auswählen

print document.findall('.//div')
Für die Zukunft: Bitte Code mitposten und zwar solchen den man direkt ausführen kann.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
__marcus__
User
Beiträge: 92
Registriert: Mittwoch 10. September 2008, 22:10
Wohnort: Hamburg

Freitag 12. September 2008, 13:31

Leonidas hat geschrieben:
__marcus__ hat geschrieben:

Code: Alles auswählen

print document.findall('div')
Ja, das wäre als CSS-Selektor durchgegangen. Die unterstützt ET aber nicht, das ist lxml vorbehalten. Siehe hier, was ET so kann. Bei dir ist <html> das Wurzelelement und es hat kein <div> als Kind, sondern <head> und <body>, daher wird kein <div> gefunden.

Um das <div> zu bekommen:

Code: Alles auswählen

print document.findall('.//div')
Für die Zukunft: Bitte Code mitposten und zwar solchen den man direkt ausführen kann.
Vielen Dank für die Mühe.
Antworten