Cheerio 获取元素外部 html

Posted

技术标签:

【中文标题】Cheerio 获取元素外部 html【英文标题】:Cheerio get element outer html 【发布时间】:2017-09-07 23:27:42 【问题描述】:

我正在使用cheerio 在节点6.10.2 的服务器端解析html 文件。我需要获取文档正文中每个 div 的 outerHtml,我的代码是:

 /* const data is valid html document (type of string)*/
 const $ = cheerio.load(data);
 let pages = $('body > div').toArray();
 console.log(pages[0]); // Elements parsed correctly
 let htmlPages = pages.map(page => $(page).html());
 console.log(htmlPages[0]); // Here I have innerHtml, not outer...      

问题:我正在使用 innerHtml 获取字符串。 任何人都可以帮忙吗? ?

【问题讨论】:

【参考方案1】:

将您的地图功能更改为

let htmlPages = pages.map(page => $.html(page));

根据docs

【讨论】:

【参考方案2】:

如果您无法轻松访问原始 $ 对象,以下方法也可以使用

function outerHTML (element) 
    var index = element.index();
    var parent = element.parent().clone();
    var child = parent.children()[index];
    parent.empty();
    parent.append(child);
    return parent.html();

【讨论】:

对我不起作用,我只是在 index() 上收到一个错误,它不是函数:休斯顿我们有问题:TypeError: element.index is not a function at outerHTML (C :\xxxxx\cafe\locators\crawler\scanner.js:77:23) 在 GetElementContent (C:\xxxxx\cafe\locators\crawler\scanner.js:45:15) 在 Node.GetElementContent.$.children.each (C:\xxxxx\cafe\locators\crawler\scanner.js:67:7) 在 initialize.exports.each (C:\xxxxx\node_modules\cheerio\lib\api\traversing.js:300:24) 在 GetElementContent (C:\xxxxx\cafe\locators\crawler\scanner.js:62:27) 这确实有效:function outerHTML(element) $(element).each(function(index, elem) var $this = $(this); console.log($.html($这)); ); ;

以上是关于Cheerio 获取元素外部 html的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 node.js 在cheerio 中获取元素名称

有没有办法选择cheerio中的每一个元素?

Cheerio 没有选择特定的元素

jQuery 获取除子元素 X 之外的子元素的 HTML

获取选定元素的外部 HTML

jQuery - 如何使用元素的 HTML 获取所有样式/css(在内部/外部文档中定义)