Objetivo: Extraer texto de un elemento en particular (por ejemplo, li), ignorando las diversas etiquetas mixtas, es decir, aplanar al hijo de primer nivel y simplemente devolver el texto concatenado de cada elemento secundario aplanado por separado.HTML XPath: ¿extracción de texto mezclado con varias etiquetas?
Ejemplo:
<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>
texto deseado:
- Agencia Central de Inteligencia
- Culinary Institute of America
Salvo que las etiquetas de anclaje que rodean impiden una recuperación sencilla.
Para volver cada etiqueta li separado, se utiliza el sencillo:
//div[contains(@id,"mw-content-text")]/ol/li
sino que también incluye rodea las etiquetas de anclaje, etc. Y
//div[contains(@id,"mw-content-text")]/ol/li/text()
sólo devuelve los elementos de texto que son hijos directos de li, es decir, 'Central', '.'...
Parecía lógico entonces buscar elementos de texto de uno mismo y descendientes
//div[contains(@id,"mw-content-text")]/ol/li[descendant-or-self::text]
pero eso no devuelve nada en absoluto!
¿Alguna sugerencia? Estoy usando Python, por lo que estoy abierto a usar otros módulos para el postproceso.
(estoy usando el Scrapy HtmlXPathSelector que parece XPath 1.0 compatible)
Puede ser útil: http://stackoverflow.com/questions/4378502/xpath-return-all-non-blank-text-nodes-not-descendant-of-a-style-or-script/6303276 – warvariuc