http
、https
、fs
、cheerio
模块。当然cheerio
需要安装后引入。
当然,关于cheerio
更多的内容,你可以看npmjs官方文档
// 安装cheerio npm install cheerio
我们需要创建一个server.js
文件。本次我们爬取豆瓣电影网站中上海正在热映的电影海报。
const http = require("http") const https = require("https") const fs = require("fs") const cheerio = require("cheerio") // 爬取网站地址 豆瓣电影上海正在热映的电影海报 const urlString = "https://movie.douban.com/cinema/nowplaying/%E4%B8%8A%E6%B5%B7/" // 创建服务 const server = http.createServer((res,req) => { let data = '' https.get(urlString,(result) => { result.on('data',(chunk) => { data += chunk }) result.on('end',() => { fs.writeFileSync('./new.html', data); // 你的根目录下就会有一个new的静态网页代码(便于查看,没有都可以) console.log('传输完成'); filterData(data) //调用过滤文件方法 }) }) }) // 用cheerio过滤数据 function filterData(data) { const $ = cheerio.load(data); let imgArr = [] //用于存取过滤后的数据容器 $('.lists>li').each((index,el) => { imgArr.push($(el).find(".poster img").attr("src")) }) console.log(imgArr) imgArr.forEach((item,index) => { loadImg (item) //下载图片 }) } // 封装下载图片到本地 function loadImg (url) { https.get(url, (res) => { res.setEncoding("binary"); // 设置response的编码为binary(二进制)否则会下载下来的图片打不开 var imgData = ''; res.on('data', (chunk) => { imgData += chunk; }) res.on('end', () => { // 将爬到的图片下载到本地,下载前要确认根目录下有images文件夹,否则会fail fs.writeFile('./images/' + Math.floor(Math.random() * 100000) +'.png', imgData, "binary", (error) => { if(error){ console.log("down fail"); } else { console.log("down success"); } }); }) }) } // 开启监听服务 server.listen('8888',()=>{ console.log('localhost:8888') })
创建好服务,定义好过滤方法filterData
以及下载图片的方法loadImg
后。通过命令启动服务。然后在浏览器中输入网址localhost://8888
,就会发现神奇的一幕出现了:几十张图片秒下载。
同理,下载视频等文件都是OK的。