Nodejs cheerio 爬虫偶尔遇到中文乱码问题

Nodejs cheerio 爬虫偶尔遇到中文乱码问题
基本都是 utf8 的网页,用 cheerio 解析出的结果偶尔会遇到�,然后下一次就又正常了,各位朋友有遇到类似情况的没?

3 回复

可以试试 superagent-charset


不设 encoding 好像会是 buffer,再转

在Node.js中使用Cheerio进行网页爬虫时,遇到中文乱码问题通常是由于字符编码处理不当导致的。以下是一些可能的解决方案,包括代码示例:

  1. 确保请求的响应编码正确: 使用axiosnode-fetch等HTTP库时,可以指定响应类型或手动处理编码。

    const axios = require('axios');
    
    axios({
        url: 'http://example.com',
        responseType: 'arraybuffer'
    }).then(response => {
        const charset = 'utf-8'; // 假设网页是UTF-8编码
        const text = response.data.toString(charset);
        const $ = cheerio.load(text);
        // 处理你的Cheerio对象
    }).catch(error => {
        console.error(error);
    });
    
  2. 使用iconv-lite库转换编码: 如果网页的编码不是UTF-8,你可以使用iconv-lite库进行编码转换。

    const iconv = require('iconv-lite');
    const fs = require('fs');
    
    // 假设你已经有了一个Buffer对象buffer
    const decodedText = iconv.decode(buffer, '编码类型'); // 例如'gbk'
    const $ = cheerio.load(decodedText);
    
  3. 检查网页的<meta charset>标签: 在解析网页前,检查<meta charset>标签以确认正确的字符编码。

    const charset = $('meta[charset]').attr('charset') || 'utf-8';
    // 根据charset重新加载或转换文本
    

确保你的爬虫代码能正确处理不同网页的编码,这样可以有效减少中文乱码问题的出现。

回到顶部