Mit lxml einen Text-Knoten finden

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

Komme ich mit lxml irgendwie an das "Welt" in dem folgenden Beispiel?

Code: Alles auswählen

from lxml import etree
html = etree.fromstring("<html><a>Hallo</a> Welt <b>!</b></html>")
print html.find("a").text  #=> Hallo
print html.find("b").text #=> !
Die "Element"-Abstraktion sieht glaube ich nicht vor, dass ein Element nicht nur Elemente als Kinder hat. In HTML kann das aber durchaus passieren.

Alternativ kann ich auch dies machen, hilft mir aber auch nicht wirklich:

Code: Alles auswählen

from lxml import html
doc = html.fromstring("<html><a>Hallo</a> Welt <b>!</b></html>")
print doc.find("body").text_content() #=> Hallo Welt !
OK, dies geht wohl. Meine Frage hat sich wohl erledigt ;)

Code: Alles auswählen

print doc.find("body").find("a").xpath("following-sibling::text()")[0] #=> Welt
Stefan
BlackJack

Der Text nach einem Element ist als Attribut verfügbar:

Code: Alles auswählen

In [224]: html.find('a').tail
Out[224]: ' Welt '
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ha, super. Danke.

Stefan
Antworten