HTML XPath: Извлечение текста, смешанного с несколькими тегами?

Цель: Извлечь текст из определенного элемента (например, li), игнорируя при этом различные смешанные теги, т. е. свести дочерний элемент первого уровня и просто вернуть объединенный текст каждого сглаженного дочернего элемента по отдельности.

Пример:

<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>  

требуемый текст:

  • Центральное разведывательное управление
  • Кулинарный институт Америки

За исключением того, что метки привязки препятствуют простому поиску.

Чтобы вернуть каждый тег li отдельно, мы используем прямое:

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

, но это также включает в себя окружающие теги привязки и т. д. И

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

возвращает только текстовые элементы, которые являются прямыми дочерними элементами li, т.е. 'Центральный',' .'...

Тогда казалось логичным искать текстовые элементы self и потомков

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

, но это вообще ничего не возвращает!

Есть предложения? Я использую Python, поэтому я открыт для использования других модулей для постобработки.

(Я использую Scrapy HtmlXPathSelector, который кажется совместимым с XPath 1.0)

15
задан ChaimKut 16 May 2012 в 11:58
поделиться