You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用crawler库时cheerio生成HTML比res.body大且重复如何解决

问题原因

  • 核心错误出在let content_test1 = $("*").toString();这行代码:
    • $("*")是通配符选择器,会匹配页面里所有层级的DOM节点(从顶层的html、head、body,到每一层的div、span、文本标签等所有元素),返回的是包含所有匹配元素的集合
    • 直接对这个元素集合调用toString()时,会遍历每一个元素,把每个元素自身+所有后代节点的完整HTML依次拼接,相当于外层节点的内容已经被输出过一次,内层节点又会重复输出一次,最终结果自然会出现大量重复内容,体积也远大于原始的res.body
  • 还有两个隐藏的代码问题:
    • 错误捕获分支里抛出的变量是err,但入参定义的错误变量是error,变量名不匹配,触发错误时会抛出变量未定义的异常
    • 两次fs.writeFile都写入同一个path路径,后执行的写入操作会直接覆盖前一次的写入结果

修复方案

如果要获取cheerio解析处理后的完整页面HTML,把获取content_test1的代码替换为let content_test1 = $.html();即可,这个方法会输出和原始res.body结构一致的完整HTML内容,不会出现重复。

内容的提问来源于stack exchange,提问作者delepelaire charles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:15:05