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

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

模拟下 UA

在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社区的帮助。

回到顶部