为了账号安全,请及时绑定邮箱和手机立即绑定

使用nodejs抓取时,出现转码问题

使用nodejs抓取时,出现转码问题

不负相思意 2019-04-16 17:05:51
newsList和newsDetail单独拿出来调试没有问题。但如下放在一起时,提示bodyisnotdefined经多次调试,错误节点应该是出现在readNewsDetail()中//转换gbk编码的网页内容body2=iconv.decode(body,'gbk');//根据网页内容创建DOM操作对象var$=cheerio.load(body2);这两句。因为直接var$=cheerio.load(res.body.toString());的话,不会报错。但这样一来,输出的就是乱码了,所以必须转码。但一按照我的写法转码,就会报错……请教各位,这个问题应该怎么解决呢?源码:varrequest=require('request');varcheerio=require('cheerio');variconv=require('iconv-lite');varasync=require('async');vardebug=require('debug')('sina1:update');/***获取新闻列表*/functionreadNewsList(url,callback){debug('读取新闻列表:%s',url);request(url,function(err,res){if(err)returncallback(err);//根据网页内容创建DOM操作对象var$=cheerio.load(res.body.toString());//读取新闻列表varnewsList=[];$('.news-item').each(function(){var$me=$(this);var$title=$me.find('h2a');var$time=$me.find('.time');var$url=$me.find('h2a');varitem={title:$title.text().trim(),url:$url.attr('href'),time:$time.text().trim()};newsList.push(item);});//返回结果callback(null,newsList);});}/***获取新闻页面内容*/functionreadNewsDetail(url,callback){debug('读取新闻内容:%s',url);request(url,function(err,res){if(err)returncallback(err);//转换gbk编码的网页内容body2=iconv.decode(body,'gbk');//根据网页内容创建DOM操作对象var$=cheerio.load(body2);//获取正文内容varnewsDetail=[];$('.article').each(function(){var$me=$(this);var$img=$me.find('.img_wrapperimg');varitem={content:$me.html().trim(),img:$img.attr('src')};newsDetail.push(item);});//返回结果callback(null,newsDetail);});}//读取列表下的所有新闻readNewsList('http://news.sina.com.cn/china/',function(err,newsList){if(err)returnconsole.error(err.stack);//依次取出newsList数组的每个元素,调用第二个参数中传入的函数//函数的第一个参数即是newsList数组的其中一个元素//函数的第二个参数是回调函数async.eachSeries(newsList,function(news,next){//读取新闻正文readNewsDetail(news.url,function(err,detail){console.log(detail);//if(err)console.error(err.stack);//////直接显示//console.log(detail);////////需要调用next()来返回//next();});},function(err){//当遍历完newsList后,执行此回调函数if(err)returnconsole.error(err.stack);console.log('完成');});});
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 319 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信