node爬虫gbk中文乱码问题

刚入坑node 写第二个node爬虫时,遇到了这个坑,记录一下。

主要步骤:

1.安装iconv-lite 输入npm install iconv-lite

2.将接收到的网页源码以二进制的方式存储下来,处理二进制数据流使用Buffer全局对象。

3. 然后对这些二进制的数据调用对应的解码程序。iconv-lite模块用于解码。

全部代码:

var http=require('https');
var fs=require('fs');
var cheerio=require('cheerio');
var iconv=require('iconv-lite');//iconv-lite模块用于解码
var request=require('request');

var url='https://search.51job.com/list/030200,000000,0000,00,9,99,web%25E5%2589%258D%25E7%25AB%25AF,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=';

function goStart(url){
    http.get(url,function(res){
        var htmlData=[];//用于接收获取到的网页
        var htmlDataLength=0;
        //res.setEncoding('utf-8');
        res.on('data',function(chunk){
            htmlData.push(chunk);
            htmlDataLength+=chunk.length;
        })
        
        res.on('end',function(){
            //数据获取完毕后,开始解码
            var bufferHtmlData=Buffer.concat(htmlData,htmlDataLength);
            var decodeHtmlData=iconv.decode(bufferHtmlData,'gbk');
            var $=cheerio.load(decodeHtmlData,{decodeEntities: false});
            
            
            $('#resultList .el').each(function(index,item){
                if(index!=0){
                    var name=$(this).children().eq(1).children().eq(0).text();
                    console.log(name);
                }
            })
        })
    })
}

goStart(url);

运行结果(屏幕有点小,图截的不全)

 

教程参考地址:https://blog.csdn.net/javajiawei/article/details/65935338?utm_source=tuicool&utm_medium=referral

posted @ 2018-04-02 22:30  兔子先生i  阅读(483)  评论(0编辑  收藏  举报