HTML XPath: Extraire du texte mélangé avec plusieurs balises?

Objectif: Extraire le texte à partir d'un élément particulier (par exemple, li), tout en ignorant les différents mélangés dans les tags, c'est à dire aplatir les enfants de premier niveau et il suffit de retourner la concaténation de texte de chaque aplatie enfant séparément.

Exemple:

<div id="mw-content-text"><h2><span class="mw-headline" >CIA</span></h2>
    <ol>
    <li>Central <a href="/Intelligence_Agency.html">Intelligence Agency</a>.</li>
    <li>Culinary <a href="/Institute.html">Institute</a> of <a href="/America.html">America</a>.</li>
    </ol>

    </Div>  

texte:

  • Agence Centrale De Renseignement
  • Institut culinaire de l'Amérique

Sauf que le point d'ancrage des balises entourant empêcher une simple récupération.

À revenir chaque balise li séparément, nous utilisons le simple:

//div[contains(@id,"mw-content-text")]/ol/li

mais qui comprend également l'entourant d'ancrage des balises, etc. Et

//div[contains(@id,"mw-content-text")]/ol/li/text()

renvoie uniquement les éléments de texte qui sont les enfants directs de li, c'est à dire 'Central','.'...

Il semble logique alors de chercher des éléments de texte de soi et de descendants

//div[contains(@id,"mw-content-text")]/ol/li[descendant-or-self::text]

mais qui ne retourne rien du tout!

Des suggestions? Je suis à l'aide de Python, donc je suis ouvert à l'utilisation d'autres modules de post-traitement.

(Je suis en utilisant le Scrapy HtmlXPathSelector qui semble XPath 1.0 conforme)

source d'informationauteur ChaimKut