Maison  >  Questions et réponses  >  le corps du texte

Comment extraire du texte séparé par différentes balises HTML dans Cheerio

<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粉141911244P粉141911244455 Il y a quelques jours559

répondre à tous(2)je répondrai

  • P粉198670603

    P粉1986706032023-08-14 14:15:14

    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"

    répondre
    0
  • P粉386318086

    P粉3863180862023-08-14 13:23:13

    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>

    répondre
    0
  • Annulerrépondre