Comment extraire du texte séparé par différentes balises HTML dans Cheerio
P粉141911244
P粉141911244 2023-08-13 17:01:06
0
2
582
<p>J'essaie d'extraire les chaînes de texte spécifiques suivantes en tant que sorties distinctes, par exemple (en les récupérant dans le code HTML ci-dessous) : </p> <pre class="brush:js;toolbar:false;">let text = "C'est le premier texte dont j'ai besoin"; let text2 = "C'est le deuxième texte dont j'ai besoin"; let text3 = "C'est le troisième texte dont j'ai besoin"; ≪/pré> <p>Je ne sais vraiment pas comment séparer le texte par différentes balises HTML. </p> <pre class="brush:html;toolbar:false;"><p> <span class="hidden-text"><span class="ft-semi"> Nombre :</span>31<br></span> <span class="ft-semi">Quelque chose :</span> C'est le premier texte dont j'ai besoin <span class="hidden-text"><span class="ft-semi">Something2 :</span> </span>C'est le deuxième texte dont j'ai besoin <br><span class="ft-semi">Something3:</span> C'est le troisième texte dont j'ai besoin </p> ≪/pré> <p><br /></p>
P粉141911244
P粉141911244

répondre à tous(2)
P粉198670603

Essayez quelque chose comme ceci et voyez si cela fonctionne :

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);
  }
}

En utilisant votre exemple HTML, le résultat devrait être :

"That's the first text I need"
"The second text I need"
"The third text I need"
P粉386318086

Vous pouvez itérer <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>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal