使用HTMLAgilityPack提取不在标签之间的文本

时间:2019-02-14 08:37:53

标签: c# .net vb.net html-agility-pack

具有此源代码:

<div class="post_body" id="pid_103891">
   <div>
      <div class="ficha">
         <h2><span class="estado Completo">Completo</span> &quot;Bungaku Shoujo&quot; Kyou no Oyatsu: Hatsukoi</h2>
         <div class="portada" style="background-image:url('//galeria.unionfansub.com/img/Bungaku_Shoujo_portada_13419.jpg')"></div>
         <div class="datos">
            <div><strong>Fansub: </strong><a href="fansubs.php?fansub=Dekats">Dekats</a></div>
            <div><strong>Público: </strong><a href="forumdisplay.php?fid=2&amp;filtertf_publico=Shojo&amp;sortby=&amp;order=">Shojo</a></div>
            <div><strong>Ambientación: </strong><a href="forumdisplay.php?fid=2&amp;filtertf_ambientacion=Presente&amp;sortby=&amp;order=">Presente</a></div>
            <div><strong>Género: </strong><a href="forumdisplay.php?fid=2&amp;filtertf_genero=Romance&amp;sortby=&amp;order=">Romance</a>, <a href="forumdisplay.php?fid=2&amp;filtertf_contenido=Chica Magica&amp;sortby=&amp;order=">Chica Magica</a>&zwnj;, <a href="forumdisplay.php?fid=2&amp;filtertf_contenido=Vida Escolar&amp;sortby=&amp;order=">Vida Escolar</a></div>
            <div><strong>Estudio: </strong>Production I.G</div>
            <div> <span class="episodios">1</span> </div>
            <div><strong>Duración: </strong>15 min.</div>
            <div><span class="produccion">2009</span></div>
            <div><strong>Video: </strong><span class="source Blu-ray" title="Blu-ray"></span><span class="resolucion">1280x720</span> <span class="codec">H.264</span></div>
            <div><strong>Contenedor: </strong>MKV<span class="xinfo Softsubs">Softsubs</span></div>
            <div><strong>Audio: </strong><span class="flag Japones" title="Japonés AAC"></span></div>
            <div><span class="subtitulos"><span class="flag Castellano" title="Castellano"></span></span></div>
            <div><strong>Servidor: </strong><a class="host torrent" href="//torrent.unionfansub.com/details.php?id=3366&amp;hit=1" title="Torrent"></a></div>
            <div></div>
            <div id="guestalert">Solo los usuarios registrados pueden descargar por torrent</div>
            <div>
               <strong style="vertical-align:top">Archivos Torrent:</strong><span style="display:inline-block"><a style="font-size:.8em;" href="//torrent.unionfansub.com/filelist.php?id=3366" onclick="this.style.display='none';this.parentElement.parentElement.getElementsByTagName('table')[0].style.display='block'; return false;">[mostrar archivos]</a></span>
               <table id="filelist">
                  <tr>
                     <td>[Dekats]&nbsp;Bungaku&nbsp;Shoujo&nbsp;-&nbsp;Kyou&nbsp;no&nbsp;Oyatsu&nbsp;~Hatsukoi~&nbsp;[BD-720p]&nbsp;[3B1D8038].mkv</td>
                     <td style="text-align:right">467,93 MB</td>
                  </tr>
               </table>
            </div>
            <div style="width:1em;overflow:visible;white-space:nowrap"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fforo.unionfansub.com%2Fshowthread.php?tid=4665" scrolling="no" frameborder="0" style="margin-top:8px;border:none; width:auto; height:2em"></iframe> <iframe src="//foro.unionfansub.com/plusone.php?url=http%3A%2F%2Fforo.unionfansub.com%2Fshowthread.php?tid=4665" marginheight="0" marginwidth="0" frameborder="0" scrolling="no" style="border:0;width:84px;height:26px;"></iframe></div>
            <div>
               <hr>
               <strong>Historia principal: </strong><a href="showthread.php?tid=9726">Bungaku Shoujo</a>
            </div>
            <hr>
            <div><strong style="vertical-align:top">Otros Fansubs:</strong><span style="display:inline-block"><a title="Subiendo" style="display:block;" href="showthread.php?tid=15158"><span class="Subiendo"></span> AxFe <span class="flag Japonés" title="Japonés"></span></a><a title="Versión alternativa" style="display:block;" href="showthread.php?tid=6145">Osokusubs <span class="flag Japonés" title="Japonés"></span></a><a title="Versión alternativa" style="display:block;" href="showthread.php?tid=14906">Osokusubs <span class="flag Japonés" title="Japonés"></span></a></span></div>
         </div>
         <div style="display:inline-block;vertical-align:top;border-left:1px solid #AEA89C;padding-left:6px;"> </div>
      </div>
   </div>
   <script type="text/javascript">
      var pass = "";
      pass = pass.substr(29).replace('&quot;', '"');
      $$('#pid_103891 .host').each(function(item) { if ((item.getAttribute('Title') != 'Torrent') && (item.getAttribute('Title') != 'XDCC') && (item.getAttribute('Title') != 'Torrent descargado')) Event.observe(item, 'click', function(event)
      {
      jd($(Event.element(event)).title, 'pid_103891', pass);
      } ); });
   </script> 
   <div></div>
   Bungaku Shoujo se centra en Konoha y Tooko, la Chica Literaria. Tooko es algo peculiar: es un yōkai que, desde pequeña, come novelas. Ahora le tocará a su compañero de club, Konoha, escribirle historias a diario para 'tenerla contenta'. Esta primera OVA (Bungaku Shoujo está compuesta de cuatro OVAs: una “suelta”, y tres pertenecientes a “Memoire”; y una película) muestra un día en el club literario, así como lo sensitiva que puede llegar a ser Tooko al “leer” una historia y cómo la Chica Literaria, al ser la líder del club literario, intenta que se una más gente al mencionado club.<br>
   <br>
   <div class="spoil">
      <h5>Capturas:</h5>
      <span class="spoilbtn" onclick="spoil(this)">Mostrar</span>
      <section>
         <div><a href="//galeria.unionfansub.com/image.php?id=13420"><span class="dimg" data-src="//galeria.unionfansub.com/mini/Bungaku_Shoujo_OVA1A_13420.jpg">&quot;Bungaku Shoujo&quot; Kyou no Oyatsu: Hatsukoi - Dekats Bungaku_Shoujo_OVA1A_13420</span></a><a href="//galeria.unionfansub.com/image.php?id=13421"><span class="dimg" data-src="//galeria.unionfansub.com/mini/Bungaku_Shoujo_OVA1B_13421.jpg">&quot;Bungaku Shoujo&quot; Kyou no Oyatsu: Hatsukoi - Dekats Bungaku_Shoujo_OVA1B_13421</span></a><a href="//galeria.unionfansub.com/image.php?id=13422"><span class="dimg" data-src="//galeria.unionfansub.com/mini/Bungaku_Shoujo_OVA1C_13422.jpg">&quot;Bungaku Shoujo&quot; Kyou no Oyatsu: Hatsukoi - Dekats Bungaku_Shoujo_OVA1C_13422</span></a><a href="//galeria.unionfansub.com/image.php?id=13423"><span class="dimg" data-src="//galeria.unionfansub.com/mini/Bungaku_Shoujo_OVA1D_13423.jpg">&quot;Bungaku Shoujo&quot; Kyou no Oyatsu: Hatsukoi - Dekats Bungaku_Shoujo_OVA1D_13423</span></a><a href="//galeria.unionfansub.com/image.php?id=13424"><span class="dimg" data-src="//galeria.unionfansub.com/mini/Bungaku_Shoujo_OVA1E_13424.jpg">&quot;Bungaku Shoujo&quot; Kyou no Oyatsu: Hatsukoi - Dekats Bungaku_Shoujo_OVA1E_13424</span></a><a href="//galeria.unionfansub.com/image.php?id=13425"><span class="dimg" data-src="//galeria.unionfansub.com/mini/Bungaku_Shoujo_OVA1F_13425.jpg">&quot;Bungaku Shoujo&quot; Kyou no Oyatsu: Hatsukoi - Dekats Bungaku_Shoujo_OVA1F_13425</span></a></div>
      </section>
   </div>
</div>

我想提取不在标记内的文本:

<div class="post_body" id="pid_103891">
   ...

   Bungaku Shoujo se centra en Konoha y Tooko, la Chica Literaria. Tooko es algo peculiar: es un yōkai que, desde pequeña, come novelas. Ahora le tocará a su compañero de club, Konoha, escribirle historias a diario para 'tenerla contenta'. Esta primera OVA (Bungaku Shoujo está compuesta de cuatro OVAs: una “suelta”, y tres pertenecientes a “Memoire”; y una película) muestra un día en el club literario, así como lo sensitiva que puede llegar a ser Tooko al “leer” una historia y cómo la Chica Literaria, al ser la líder del club literario, intenta que se una más gente al mencionado club.

   ...
</div>

请注意,我不知道里面的单词,因此我想不能使用text()[contains()]


我尝试过的事情:

MyDocument.DocumentNode.SelectSingleNode("//div[@class='post_body']//text()[1]").InnerText

...类似于this问题。

并且:

MyDocument.DocumentNode.SelectSingleNode("//div[@class='post_body'][1]//*[not(self::script or self::table or self::span or self::h2 or self::h5 or self::strong or self::a)]/text()").InnerText

MyDocument.DocumentNode.SelectSingleNode("//div[@class='post_body'][1]//*[not(self::script or self::table or self::span or self::h2 or self::h5 or self::strong or self::a)]/text()[normalize-space()]").InnerText

...以this为例。

1 个答案:

答案 0 :(得分:1)

根据上面发布的HTML代码段,由于目标文本是 post_body中唯一不包含空格或空格的直接子文本节点,因此您应该可以使用以下XPath表达式以获取该文本:

var query = "//div[@class='post_body']/text()[normalize-space()]";
var result = MyDocument.DocumentNode.SelectSingleNode(query).InnerText;

XPath故障:

  • //div[@class='post_body'] :在文档中的任何位置找到类div的{​​{1}}元素
  • post_body :查找所有/text()直接子节点的文本节点
  • div :过滤出空白或仅包含空格的文本节点