当前位置: 首页 > 后端技术 > Node.js

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

时间:2023-04-03 11:32:39 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,然后转码//别告诉我箭头函数看不懂consthttps=require('https')//url是URL地址,我就不举例了https.get('url',info=>{//定义一个空数组来存放Buffer片段整合letarr=[]info.on('data',chunk=>{arr.push(chunk)})info.on('end',()=>{//数据返回后,将编码转换为utf8arr=Buffer.concat(arr)//编码转换,根据编码自定义转码你爬取的网页的letresult=newTextDecoder('gbk').decode(newUint8Array(arr).buffer)console.log(result);})})②添加第三方iconv模块转码下载第三个-party模块从命令行$npmiiconv-lite导入模块,转码iconv.decode()Buffer()真正的列片段consthttps=require('https')//导入模块consticonv=require('iconv-lite')//url是URL地址,我不会例如https.get('url',info=>{letarr=[]info.on('data',chunk=>{arr.push(chunk)})info.on('结束',()=>{//数据回来后,将gbk编码转为utf8arr=Buffer.concat(arr)//需要依赖第三方模块iconv-liteletresult=iconv.decode(Buffer.from(arr),'gbk');控制台日志(结果);})})③添加第三方编码模块转码命令行下载第三方模块$npmiencoding导入模块,执行encoding.convert()转码Buffer()Fragmentconsthttps=require('https')//importmoduleconstencoding=require('encoding')//url为URL地址,我就不举例了https.get('url',info=>{letarr=[]info.on('data',chunk=>{arr.push(chunk)})info.on('end',()=>{//数据回来后,将gbk编码转成utf8arr=Buffer.concat(arr)//需要依赖第三方模块encodingletresult=encoding.convert(arr,'utf8','gbk')//convert参数只使用buffer,不使用stringconsole.log(result.toString());})})以上是我目前知道的几种node.js解码方法。如果有任何不足之处,请告诉我。谢谢。这篇文章是技术文档,没有很好的布局和故事......