目標:特定の要素(例:li)からテキストを抽出しながら、さまざまな混在タグを無視します。つまり、第1レベルの子供を平坦化し、平坦化された各子供の連結テキストを別々に返します。HTML XPath:複数のタグが混在したテキストの抽出?
例:
<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()
戻り含み
自己と子孫のテキスト要素を探すのは論理的だと思われる
//div[contains(@id,"mw-content-text")]/ol/li[descendant-or-self::text]
しかし、それはまったく何も返しません!
提案がありますか?私はPythonを使用していますので、後処理のために他のモジュールを使用することができます。
(Iは、XPath 1.0に準拠しているようだScrapy HtmlXPathSelectorを使用しています)
役に立つことがあります:http://stackoverflow.com/questions/4378502/xpath-return-all-non-blank-text-nodes-not-descendant-of-a-style-or-script/6303276 – warvariuc