Nodejs中cheerio在window和mac结果完全不一样,求解

发布于 1周前 作者 htzhanglong 来自 nodejs/Nestjs

Nodejs中cheerio在window和mac结果完全不一样,求解

是这样的,心血来潮研究一下 node 爬虫,其中用到了 cheerio 模块,楼主工作用的电脑是 Mac,这个模块用在 Mac 上非常顺手,但是我在我自己的服务器上用,同样的代码,同样的版本,windows server 2008 r2 完全用不了,打印出来的东西不知道是什么鬼东西,求助一下,求大佬解惑

15 回复

iconv 试一下
ps: 我之前有一次读出来中文汉字全是问号, 后面把 Header 里面的 Host 去掉又能正常读取汉字了…


这么说不太好分析,建议贴出具体问题,执行 log 等

不是编码的问题,是在 Windows server 2012 上出来的结果跟 mac 上结果完全不一样,在 Mac 上可以使用 jquery 语句一层一层往下找,结构很清晰,比如 $(‘body’).find(’.list’) 在 mac 上很完美,在 win 下就可能返回 length:0

服务器返回的 HTML 相同吗…

日志不贴,response 不贴,你让人家怎么帮你?

先确定返回的数据是否一致先?说不定人家屏蔽了 xx 云的 ip 呢。

我能说结构完全不一样,同样一句$(“body”) win 下返回的一大串 json,都不敢一个个往下找,mac 直接就出来了

node 依赖的底层在 win 上本来就和 linux 不一样

应该时和 Mac 不一样

各位大佬,原因找到了,是 URL 的问题,有些网页在 Mac 上的地址和 win 上的地址不一样,在 Mac 上能打开,但是在 win 上就打不开

很多通过 UA 判断的啊

再提一句,服务器打不开是因为被他们网站的反爬虫屏蔽了 IP

在Node.js中使用Cheerio进行网页解析时,如果在Windows和macOS上得到的结果不一致,可能的原因包括环境差异、依赖版本不一致、文件路径处理差异等。以下是一些排查和解决问题的建议:

  1. 确保依赖版本一致: 确保在两个平台上安装的Cheerio及其依赖库的版本完全一致。可以通过package.json锁定版本,并使用npm installyarn安装。

    {
      "dependencies": {
        "cheerio": "^1.0.0-rc.10"
      }
    }
    
  2. 检查文件路径和换行符: Windows和macOS的换行符不同(Windows使用\r\n,macOS使用\n),这可能会影响解析结果。确保输入HTML文件的换行符一致,或在代码中统一处理。

  3. 环境变量和配置: 检查是否有环境变量或配置影响Cheerio的行为,如NODE_ENV等。

  4. 代码示例: 下面是一个简单的Cheerio使用示例,确保在两个平台上运行相同代码:

    const cheerio = require('cheerio');
    const html = '<html><body><h1>Hello, world!</h1></body></html>';
    const $ = cheerio.load(html);
    console.log($('h1').text()); // 应输出 "Hello, world!"
    
  5. 调试和日志: 增加日志输出,比较两个平台上的输入HTML和解析结果,找出差异所在。

如果以上步骤无法解决问题,建议详细比较两个平台上的Node.js版本、Cheerio版本及所有相关依赖,或在GitHub等平台上寻求Cheerio社区的帮助。

回到顶部