在Cheerio中如何提取由不同HTML标签分隔的文本
<p>我正在尝试将下面的特定文本字符串作为单独的输出进行提取,例如(从下面的HTML中抓取它们):</p>
<pre class="brush:js;toolbar:false;">let text = "这是我需要的第一个文本";
let text2 = "这是我需要的第二个文本";
let text3 = "这是我需要的第三个文本";
</pre>
<p>我真的不知道如何获得由不同的HTML标签分隔的文本。</p>
<pre class="brush:html;toolbar:false;"><p>
<span class="hidden-text"><span class="ft-semi">Count:</span>31<br></span>
<span class="ft-semi">Something:</span> 这是我需要的第一个文本
<span class="hidden-text"><span class="ft-semi">Something2:</span> </span>这是我需要的第二个文本
<br><span class="ft-semi">Something3:</span> 这是我需要的第三个文本
</p>
</pre>
<p><br /></p>
尝试像这样做,看看是否有效:
html = `your sample html above` domdoc = new DOMParser().parseFromString(html, "text/html") result = domdoc.evaluate('//text()[not(ancestor::span)]', domdoc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (let i = 0; i < result.snapshotLength; i++) { target = result.snapshotItem(i).textContent.trim() if (target.length > 0) { console.log(target); } }使用您的示例html,输出应为:
您可以迭代
<p>的子节点,并获取任何非空内容的nodeType === Node.TEXT_NODE:for (const e of document.querySelector("p").childNodes) { if (e.nodeType === Node.TEXT_NODE && e.textContent.trim()) { console.log(e.textContent.trim()); } } // 或者创建一个数组: const result = [...document.querySelector("p").childNodes] .filter(e => e.nodeType === Node.TEXT_NODE && e.textContent.trim() ) .map(e => e.textContent.trim()); console.log(result);<p> <span class="hidden-text"> <span class="ft-semi">Count:</span> 31 <br> </span> <span class="ft-semi">Something:</span> That's the first text I need <span class="hidden-text"> <span class="ft-semi">Something2:</span> </span> The second text I need <br> <span class="ft-semi">Something3:</span> The third text I need </p>