查看node官方文档,根据不同url类型对应发起相应的网络请求
1、发送一个Http请求
const http = require("http");//引入http模块
//创建请求对象发送请求(未发送http请求)
let req=http.request('http://web.itheima.com/teacher.html',res=>{
// console.log(res);
let chunks=[];
//监听data事件,获取传递过来的数据片段
//拼接数据片段
res.on('data',c=>{
chunks.push(c);
})
//监听end事件,获取数据完毕时触发
res.on('end',()=>{
//拼接所有的chunks,并转换成字符串==>html字符串
console.log( Buffer.concat(chunks).toString('utf-8'));
})
})
req.end();//将请求发出去
2、发送一个Https请求
const https = require("https");//引入https模块
//创建请求对象发送请求(未发送http请求)
const options = {
hostname: 'www.runoob.com',
port: 443,
path: '/',
method: 'GET'
};
let req=https.request(options,res=>{
// console.log(res);
let chunks=[];
//监听data事件,获取传递过来的数据片段
//拼接数据片段
res.on('data',c=>{
chunks.push(c);
})
//监听end事件,获取数据完毕时触发
res.on('end',()=>{
//拼接所有的chunks,并转换成字符串==>html字符串
console.log( Buffer.concat(chunks).toString('utf-8'));
})
})
req.end();//将请求发出去
3、通过cheerio库对页面内容进行分析
cheerio的实现是基于Jquery的核心库,并且可以直接使用jq一样的api
const cheerio = require("cheerio");
const http = require("http");//引入http模块
const download = require("download");
//创建请求对象发送请求(未发送http请求)
const host="http://web.itheima.com/";
let req=http.request('http://web.itheima.com/teacher.html',res=>{
// console.log(res);
let chunks=[];
//监听data事件,获取传递过来的数据片段
//拼接数据片段
res.on('data',c=>{
chunks.push(c);
})
//监听end事件,获取数据完毕时触发
res.on('end',()=>{
//拼接所有的chunks,并转换成字符串==>html字符串
//console.log( Buffer.concat(chunks).toString('utf-8'));
let htmlStr=Buffer.concat(chunks).toString('utf-8');
let $=cheerio.load(htmlStr);
let imgs=[];
console.log($('.tea_main .tea_con .tea_txt > ul > li > img').attr('src'));
console.log($('.tea_main .tea_con .tea_txt > ul > li > img').length);
$('.tea_main .tea_con .tea_txt > ul > li > img').each((index,item)=>{
console.log(host+$(item).attr('src'));
//如果下载文件名有中文,一定要用encodeuri进行base64编码
imgs.push(encodeURI(host+$(item).attr('src')));
})
console.log(imgs);
})
})
req.end();//将请求发出去
4、通过download库对图片进行下载
const cheerio = require("cheerio");
const http = require("http");//引入http模块
const download = require("download");
//创建请求对象发送请求(未发送http请求)
const host="http://web.itheima.com/";
let req=http.request('http://web.itheima.com/teacher.html',res=>{
// console.log(res);
let chunks=[];
//监听data事件,获取传递过来的数据片段
//拼接数据片段
res.on('data',c=>{
chunks.push(c);
})
//监听end事件,获取数据完毕时触发
res.on('end',()=>{
//拼接所有的chunks,并转换成字符串==>html字符串
//console.log( Buffer.concat(chunks).toString('utf-8'));
let htmlStr=Buffer.concat(chunks).toString('utf-8');
let $=cheerio.load(htmlStr);
let imgs=[];
$('.tea_main .tea_con .tea_txt > ul > li > img').each((index,item)=>{
imgs.push(encodeURI(host+$(item).attr('src')));
})
Promise.all(imgs.map(x=>download(x,'dist'))).then(()=>{
console.log('files download');
})
})
})
req.end();//将请求发出去