Cheerio 从 .text() 获取包含中断和 H 标记的内容
Posted
技术标签:
【中文标题】Cheerio 从 .text() 获取包含中断和 H 标记的内容【英文标题】:Cheerio get content including the breaks and H tags from .text() 【发布时间】: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 包装吗? 可能你想要某种正则表达式解决方案。 【参考方案1】:您可以制作自己的修剪样式功能。输入要保留的对象和元素。
例子:
$(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"]));
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="className">
<h1>Something here</h1>
</br>
<p>Next line text</p>
</div>
这里有一个陷阱,如果有原始文本,它也可能会被剥离。
【讨论】:
嗯,不知道你能做到这一点,但它仍然不能与那个修剪功能一起工作。请参阅上面的更新代码... @Jan 你在控制台看到了什么? @Jan 请澄清您所说的“它仍然不适用于该修剪功能。” 对不起...控制台不输出任何文本,请参阅上面的更新代码。谢谢 @Jan 你已经说过了。我非常有信心您的问题在这里:const $ = await fetchHTML(thisEntry.link);
如果您在控制台中没有输出;那么你的代码都没有运行。我不使用 Node.js,所以也许我遗漏了一些东西,但 jQuery 使用 $
作为其名称空间的一部分,并且您正在为 $
分配一个新值。以上是关于Cheerio 从 .text() 获取包含中断和 H 标记的内容的主要内容,如果未能解决你的问题,请参考以下文章