2016-07-01 9 views
1

Ich bin neu in XPath, und ich parset vollständig eine einfache Wiki-styled Webseite mit lxml.Parsing einer Wiki-gestylten Webseite, XPath-Fehler

Ich habe einen folgenden Ausdruck:

"".join(tree.xpath('//*[@id="mw-content-text"]/div[1]/p//text()')) 

Es funktioniert gut, aber ich brauche Kinder, deren Klasse ist „Referenz“ und einen lxml.etree.XPathEvalError mit folgendem Ausdruck auszuschließen:

"".join(tree.xpath('//*[@id="mw-content-text"]/div[1]/p//*[not(@class="reference")].text()')) 

Was ist der richtige XPath-Ausdruck? Vielen Dank im Voraus :)

+0

Was hat die Seite ist? –

Antwort

1

Wahrscheinlich ist der Fehler wegen .text() statt /text() aufgetreten.

Wenn Sie aufnehmen möchten auch Text von p Elemente dann müssen Sie verwenden, um die descendant-or-self :

//*[@id="mw-content-text"]/div[1]/p/descendant-or-self::*[not(@class="reference")]/text() 
+0

Hallo, könnten Sie bitte Ihrem Code eine Erklärung hinzufügen? Dies tauchte in der Review-Warteschlange auf, wie es nur Code-Antworten tun. – Will

+0

@Will Okay. Erledigt. – howlger

+1

Danke, das war's! Ich habe es gestern verstanden, und der letzte XPath-Ausdruck ist '// * [@ id =" mw-Inhaltstext "]/div [1]/p/Nachkomme-oder-selbst :: * [nicht (Vorfahr :: sup)]/text() '. – Ilya