2016-05-21 11 views
1

i XPath bin mit einer Seite verschrotten, aber ich bin mit Mühe mit einem Teil des Codes:Python Xpath erhält den Wert nur vom Root-Elemente

<div class="description"> 
    here's the page description 
    <span> some other text</span> 
    <span> another tag </span> 
</div> 

ich diesen Code bin mit zu erhält den Wert von Elemente:

description = tree.xpath('//div[@class="description"]/text()') 

i die richtigen div ich suche nicht finden, aber ich will nur den Text bekommen „hier ist die Seitenbeschreibungs“ nicht der Inhalt von inneren span-Tags

Wer weiß, wie kann ich nur den Text in der Root-Knoten, aber nicht den Inhalt von Kindknoten?

+0

dass Xpath-Ausdruck sollte nicht den Inhalt der Spannen enthalten, sondern nur den Inhalt der Textknoten, die direkte Kinder des div sind: '[" \ n Hier ist die Seitenbeschreibung \ n ", '\ n', '\ n']' – mata

Antwort

2

Der Ausdruck, den Sie gerade verwenden, würde nur den Text-Child-Knoten der obersten Ebene entsprechen. Sie können es einfach in normalize-space() wickeln Sie den Text von zusätzlichen Zeilenumbrüche aufzuräumen und Leerzeichen:

>>> from lxml.html import fromstring 
>>> data = """ 
... <div class="description"> 
... here's the page description 
... <span> some other text</span> 
... <span> another tag </span> 
... </div> 
... """ 
>>> root = fromstring(data) 
>>> root.xpath('normalize-space(//div[@class="description"]/text())') 
"here's the page description" 

Um den vollständigen Text eines Knotens einschließlich der untergeordneten Knoten zu erhalten, verwenden Sie die .text_content() Methode:

node = tree.xpath('//div[@class="description"]')[0] 
print(node.text_content()) 
+0

Danke, aber ich denke, meine Frage ist nicht klar genug, ich möchte nicht den Inhalt von Kind-Knoten, nur aus dem Wurzelknoten – Dennis

+0

@Dennis mein schlecht bekommen, aber du solltest gut sein mit dem Ausdruck, den du gerade hast - er würde nur den Textknoten der obersten Ebene entsprechen. – alecxe

Verwandte Themen