node.js - 使用cheerio从没有类的段落标签(<p>)中选择文本

标签 node.js cheerio jsdom

我正在使用 Cheerio (cheeriojs) 从具有以下 HTML 布局的网站中抓取内容。

<div class="foo"></div>
<p></p>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do  eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
<br><br>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
<br><br>
</p>

我可以使用文档中的每个函数 ( here ) 通过遍历 DOM 查找“.foo”类来访问此内容。

$('.foo').each(function(i, el){
 //Do something...
 $(this).next().next().text()
 }

从这里,我可以简单地将这些内容转换为字符串,并根据需要进行检索,但是文本会以一个未格式化的长字符串返回。 (即一篇长篇文章,各段落之间没有间距)。有没有办法,我可以在保留格式化内容的同时检索内容?

我尝试了以下操作;

      `var fruits = [];
        
        $('.foo').each(function(i, el){
            fruits[i] = $(this).next().next().text();
      }` 

作为获取当前标签并将其推送到数组的一种方法,但这与我之前的代码没有太大不同。我假设如果<br>这是可能的标签有一些 id 或类,但它们没有。有没有一种方法可以直接将这些( <br> )作为获取文本的方式,并以正确的格式检索它(即段落之间有间距)。在此,我必须问那些对cheerio更熟悉和有经验的人,我用这笔特定现金尝试做的事情是否可以用cheerio实现?我愿意寻求其他途径,并欢迎推荐模块/库,这有助于使这项任务变得更容易。

回顾一下:我想检索第二个 <p> 之间的所有文本标签,保持呈现的 HTML 上显示的格式和间距。

提前致谢。

最佳答案

如果您要求 .text() 它会去除格式。如果您请求.html(),它将返回所有内容,并保留所有标签。

所以改变这个:

fruits[i] = $(this).next().next().text();

对此:

fruits[i] = $(this).next().next().html();

关于node.js - 使用cheerio从没有类的段落标签(<p>)中选择文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37217791/

相关文章:

javascript - 在 jsdom 窗口中编辑元素并将窗口另存为新的 HTML 文件?

node.js - 使用jsdom获取DOM元素的实际宽度

html - 解开 HTML 字符串中不必要的嵌套 div (NodeJs)

node.js - 我在fedora 30上安装 Electron 版时出错

node.js - 需要帮助建立nodejs (NPM) localhost https

ruby-on-rails - rails、redis 和 node.js 的请求处理是如何异步的?

node.js - 如何在 Node.js 中高效地进行网页抓取?

javascript - 无法在 Cheerio 中显示选择器内容

javascript - nodejs 使用 cheerio 解析 xml 返回空 CDATA

node.js - 使用 Node.js 客户端从本地主机连接到 Bigtable 模拟器