目标:从特定元素(例如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 的直接子元素的文本元素,即 'Central','.'...
寻找自我和后代的文本元素似乎是合乎逻辑的
//div[contains(@id,"mw-content-text")]/ol/li[descendant-or-self::text]
但这根本没有回报!
有什么建议么?我正在使用 Python,所以我愿意使用其他模块进行后处理。
(我正在使用看起来符合 XPath 1.0 的 Scrapy HtmlXPathSelector)