提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
node解析gzip压缩的数据
使用node学习爬虫,爬取下拉的网页是经过gzip压缩的,显示一堆乱码;
记录一下解决方案。
主要是在request里加了 gzip,headers,encoding;
使用了 request 和 iconv-lite
npm i request
npm i iconv-lite
1.请求封装
代码如下(示例):
const request = require('request');
const repHTML = (url) => {
let options = {
url: url,
gzip: true,
headers: {
'Accept-Encoding': 'gzip,deflate'
},
encoding: null
}
return new Promise((resolve,reject) => {
request(options, (err, res) => {
if(!err) {
resolve(res)
} else {
reject(err)
}
})
})
}
2.发起请求
代码如下:
const Iconv = require('iconv-lite');
const zlib = require('zlib');
router.get("/obtaincity", async (req, res) => {
let responder = await repHTML(`http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2020/index.html`);
let html = responder.body;
var decodedbody = Iconv.decode(html,'gb2312');
// console.log(decodedbody);
try {
const $ = cheerio.load(decodedbody);
// const tr = $('tr.provincetr');
// tr.eq(0).find('td').eq(0).find('a').eq(0).text()
// console.log(tr.length,tr.eq(0).find('td').eq(0).find('a').eq(0).text());
} catch (e) {
console.log("e",e);
}
})
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
使用res.send吧内容在页面上显示出来,发现居然下载了来了,是一个没有后缀名的文件;
发现加上.txt后缀名打开后显示正常,把这个txt文件拉到vscode里显示的是乱码,然而用window的记事本打开就是正常的;于是使用Iconv解析gb2312,就能正常显示了