来源:我的博客:http://zhangfan.online/index.php?m=home&c=View&a=index&aid=58
添加依赖: npm i gbk
npm i jsdom
创建 app.js 文件 复制以下内容完了之后 node app 运行即可
constfs=require('fs');
consturl=require('url');
constgbk=require('gbk');
constJSDOM=require('jsdom').JSDOM;
getUrl('http://zhangfan.online',res=>{
varhtml=gbk.toString('utf-8',res);
// console.log(`打印:${html}`);
//utf8 直接使用res gbk 使用html
letDOM=newJSDOM(res);
letdocument=DOM.window.document;
console.log(document.querySelector('.info p').innerHTML);
fs.writeFile('download.html',res,()=>{
// console.log(`保存成功${res}`);
})
});
functiongetUrl(sUrl,backBlock){
varurlObj=url.parse(sUrl);
// 判断协议
varhttp='';
if(urlObj.protocol=='http:'){
http=require('http');
}else{
http=require('https');
}
// 请求连接
letreq=http.request({
'hostname':urlObj.hostname,
'path':urlObj.path
},res=>{
// 解决重定向问题
if(res.statusCode==200){
console.log('end');
vararr= [];
res.on('data',buff=>{
arr.push(buff);
});
res.on('end',()=>{
letb=Buffer.concat(arr);
backBlock&&backBlock(b);
});
}elseif(res.statusCode==302||res.statusCode==301){
// 这里使用了递归
getUrl(res.headers.location,backBlock);
}
})
// req.on('error');
req.end();
}