添加依赖:
npm i gbk
npm i jsdom
const url = require('url');
const gbk = require('gbk');
const JSDOM = require('jsdom').JSDOM;
getUrl('http://zhangfan.online',res=>{
var html = gbk.toString('utf-8',res);
// console.log(`打印:${html}`);
//utf8 直接使用res gbk 使用html
let DOM = new JSDOM(res);
let document = DOM.window.document;
console.log(document.querySelector('.info p').innerHTML);
fs.writeFile('download.html',res,()=>{
// console.log(`保存成功${res}`);
})
});
\
function getUrl(sUrl,backBlock){
var urlObj = url.parse(sUrl);
// 判断协议
var http = '';
if(urlObj.protocol == 'http:'){
http = require('http');
}else{
http = require('https');
}
// 请求连接
let req = http.request({
'hostname':urlObj.hostname,
'path':urlObj.path
},res=>{
// 解决重定向问题
if(res.statusCode == 200){
console.log('end');
var arr = [];
res.on('data',buff=>{
arr.push(buff);
});
res.on('end',()=>{
let b = Buffer.concat(arr);
backBlock && backBlock(b);
});
}else if(res.statusCode == 302 ||res.statusCode == 301){
// 这里使用了递归
getUrl(res.headers.location,backBlock);
}
})
// req.on('error');
req.end();
}
必须使用node项目爬取数据