【发布时间】:2021-03-31 18:04:54
【问题描述】:
有没有办法使用包含一些 html 标签的 Cheerio 从 html 输出文本?我知道 .html() 输出完整的 html,但我只想要使用 .text() 的文本,但包含所有 H 标记和中断?
例子:
<div class="className"><h1>Something here</h1></br><p>Next line text</p></div>
应该输出:
<h1>Something here</h1></br>Next line text
编写我现在拥有的代码:
const $ = await fetchHTML(thisEntry.link);
const content = $(`div[class='${feedDiv}']`).text()
仅输出没有任何换行符或 H1 标记的 div 文本。默认情况下,.text() 也输出<img> 标签。
更新 我正在尝试执行 cmets 中讨论的修剪功能,但仍然无法正常工作......我是否忽略了什么?
async function fetchHTML(url) {
const { data } = await axios.get(url);
return cheerio.load(data, { decodeEntities: false });
}
async function createFeed(feedConfig, entries) {
const $ = await fetchHTML(thisEntry.link);
$(function () {
function clean(o, h) {
var results = '';
if (h == undefined) {
results = o.text().trim();
} else {
$(o)
.children()
.each(function (i, el) {
if (h.indexOf($(el).prop('nodeName').toLowerCase()) >= 0) {
console.log('Found', $(el).prop('nodeName'));
results += $(el).prop('outerHTML');
} else {
console.log($(el).text().trim());
results += $(el).text().trim();
}
});
}
return results;
}
$(".className").html(clean($(".className"), ["h1", "br"]));
});
console.log($.text().trim());
}
控制台不输出任何内容
【问题讨论】:
-
所有项目都用 HTML 包装吗?
-
可能你想要某种正则表达式解决方案。
标签: javascript jquery node.js web-scraping cheerio