目标:从特定元素(例如li)中提取文本,同时忽略各种混合标签,即展平第一级子元素并简单地分别返回每个展平子元素的拼接文本。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>
所需的文本:
- 中央情报局
- 美国
的烹饪学院除了周围的锚标记防止简单的检索。
要单独返回每个L1标签,我们使用简单:
//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,因此我愿意使用其他模块进行后期处理。
(我用的是Scrapy HtmlXPathSelector这似乎的XPath 1.0标准)
可能有用:http://stackoverflow.com/questions/4378502/xpath-return-all-non-blank-text-nodes-not-descendant-of-a-style-or-script/6303276 – warvariuc