2016-07-01 1 views
1

Je suis novice dans XPath et je ne parviens pas à analyser une page Web de style wiki avec lxml.Analyse d'une page Web de type wiki, erreur XPath

J'ai une expression suivante:

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

Il fonctionne très bien, mais je dois exclure les enfants dont la classe est « référence » et obtenir un lxml.etree.XPathEvalError avec une expression suivante:

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

Quelle est la bonne expression XPath? Merci d'avance :)

+0

Quelle est la page? –

Répondre

1

Probablement, l'erreur est survenue à cause de .text() au lieu de /text().

Si vous voulez inclure également le texte des éléments p alors vous devez utiliser la descendant-or-self :

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

Salut, pourriez-vous s'il vous plaît ajouter quelques explications à votre code? Cela a surgi dans la file d'attente de révision, comme les réponses au code ont tendance à le faire. – Will

+0

@Will Okay. Terminé. – howlger

+1

Merci, c'est tout! Je l'ai compris hier, et l'expression XPath finale est '// * [@ id =" mw-contenu-texte "]/div [1]/p/descendant-or-self :: * [not (ancestor :: sup)]/text() '. – Ilya