在 Gulp 任务中使用 Cheerio 的字数统计不正确

问题描述 投票:0回答:1

我正在尝试在以下 Gulp 任务中使用 Cheerio 计算 HTML 页面的字数:

gulp.task("html", () => {
    try {
        return gulp.src(folder.src + "html/**/*.html")
            .pipe(preprocess())
            .pipe(htmlmin({
                collapseWhitespace: true,
                removeComments: true,
                minifyCSS: true,
                minifyJS: true
            }))
            .pipe(cheerio(function ($, file) {
                try {
                    const text = $("body").children(":not(header, footer, script)").text();

                    const words = text.split(/\s+/).filter(word => word.length > 0)
                    const wordCount = words.length;

                    const filename = file.relative;

                    if (filename == "clients.html") {
                        console.log(words);

                    }

                    console.log(wordCount, filename);
                } catch (error) {
                    console.error(error);
                }
            }))
            .pipe(gulp.dest(folder.build));
    } catch (error) {
        console.warn("Error parsing HTML: ", error);
    }
});

虽然这有效,但我遇到了单词未正确拆分的问题。例如,我得到如下结果:

[
  'Our',           'Valued',            'ClientsAt',
  'Zubizi',        'Web',               'Solutions,'
]

问题似乎出在“clientsAt”这个词上,它应该分成两个单独的词(“Clients”和“At”),但相反,它们被组合在一起。

这是我正在使用的 HTML 片段:


            <h1 class="text-3xl font-bold mb-3">Our Valued Clients</h1>
            <p class="text-lg mb-5">
                At Zubizi Web Solutions,
                ...

如您所见,文本“ClientsAt”未正确分割。我该如何解决这个问题?

注意:我正在尝试在编译过程中进行关键字分析。

gulp cheerio gulp-cheerio
1个回答
0
投票

(警告:我既没有运行你的代码也没有完全测试下面的代码)

您似乎遇到了此问题中报告的相同行为:How to get the text of multiple elements split by delimiter using jQuery?

如果该评估准确,则可能会使用如下代码(改编自该问题的已接受答案)

const text = $("body").children(":not(页眉、页脚、脚本)").map(function(){return $(this).text()}).get().join( '')

基本上,这个想法是在不同元素的文本之间散布一个空格;根据您当前的方法,通过调用 .text() 可以在没有分隔符的情况下连接该内容。

© www.soinside.com 2019 - 2024. All rights reserved.