node.js爬取数据乱码问题解决

1.简单理解node.js为什么爬取出现乱码

node.js爬取数据需要查看网页是utf8还是gbk还是其他什么编码,utf8可以正常爬取,gbk和其它编码需要进行转码或解码

2.utf8转gbk等编码的多种方法

三种方法都需要Buffer,Buffer实列,可以查看官网: http://nodejs.cn/api/buffer.html

① 通过Buffer.concat()方法转码,将多个buffer组成的数组,转换成完整的一个buffer,然后进行转码

//别告诉我看不懂箭头函数
const https = require('https')
//url是网址地址,本人就不举例了
https.get('url', info => {
//定义一个空数组用来存放Buffer的片段整合
    let arr = []
    info.on('data', chunk => {
        arr.push(chunk)
    })
    info.on('end', () => {
        // 在数据回来以后,将编码转换成utf8
        arr = Buffer.concat(arr)
        // 编码转换,根据你爬取的网页编码进行自定义转码
        let result = new TextDecoder('gbk').decode(new Uint8Array(arr).buffer)
        console.log(result);
    })
})



② 通过添加第三方iconv模块进行转码

在命令行下载第三方模块
$ npm i iconv-lite
导入模块,进行iconv.decode()转码Buffer()实列片段
const https = require('https')
// 导入模块
const iconv = require('iconv-lite')
//url是网址地址,本人就不举例了
https.get('url', info => {
    let arr = []
    info.on('data', chunk => {
        arr.push(chunk)
    })
    info.on('end', () => {
        // 在数据回来以后,将gbk编码转换成utf8
        arr = Buffer.concat(arr) 
        // 需要依赖第三方模块 iconv-lite
        let result = iconv.decode(Buffer.from(arr), 'gbk');
        console.log(result);
    })
})



③ 通过添加第三方encoding模块进行转码

在命令行下载第三方模块
$ npm i encoding
导入模块,进行encoding.convert()转码Buffer()实列片段
const https = require('https')
// 导入模块
const encoding = require('encoding')
//url是网址地址,本人就不举例了
https.get('url', info => {
    let arr = []
    info.on('data', chunk => {
        arr.push(chunk)
    })
    info.on('end', () => {
        // 在数据回来以后,将gbk编码转换成utf8
        arr = Buffer.concat(arr) 
        // 需要依赖第三方模块 encoding
        let result = encoding.convert(arr, 'utf8', 'gbk')
        // convert参数一  只用buffer,不用字符串
        console.log(result.toString());
    })
})

以上就是本人目前已知的几种node.js解码方式,如有不足,还请告知,谢谢
本文属于技术文档没有什么好的排版和故事...

你可能感兴趣的:(node.js爬取数据乱码问题解决)