request 模块抓 HTML 之后转格式的问题
发布于 10 年前 作者 chefisawesome 3950 次浏览 最后一次编辑是 8 年前

用的 https://github.com/mikeal/request 来抓 HTML

var request = require('request');
var iconv = require('iconv-lite');

request('http://www.78.cn/web/chayouhuo/', function (err, resp, body) {
  var bar = iconv.decode(body, 'GBK');
  console.log(bar);
});

用了 iconv 了, 输出的 bar 还是乱码的。如果先存到本地文件上,再用 iconv 去转码,就不会有问题。求解

3 回复

var request = require(‘request’); var iconv = require(‘iconv-lite’);

request({uri:‘http://www.78.cn/web/chayouhuo/’,encoding:null}, function (err, resp, body) { //body+=""; var bar = iconv.decode(body, ‘GBk’); console.log(bar); }); 你没传headers,也没穿encoding,也网站不知道跟你返回了那种编码,试了一下,这样就好了

 /**抓取网页全文源代码、主要用来抓取新闻正文
  • @param url 需要抓取的url地址

  • @param calback */ function fetchContent(url,calback){ var req = request(url, {timeout: 10000, pool: false}); req.setMaxListeners(50); req.setHeader(‘user-agent’, ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36’) .setHeader(‘accept’, ‘text/html,application/xhtml+xml’);

    req.on(‘error’, function(err) { console.log(err); }); req.on(‘response’, function(res) { var bufferHelper = new BufferHelper(); res.on(‘data’, function (chunk) { bufferHelper.concat(chunk); }); res.on(‘end’,function(){ var result = iconv.decode(bufferHelper.toBuffer(),‘GBK’); calback(result); }); }); }

这样就能正确转换编码。 可以参考下这个新闻爬虫项目 https://github.com/kissliux/rssSpider 能让你少走不少弯路

感谢回答。顺便推荐下 https://github.com/turingou/gbk ,弄gbk的东西很方便

回到顶部