1.新建一个目录,执行:
npm init
执行命令后一直回车即可,就会发现package.json文件已经创建好了,然后 安装cheerio依赖:
npm install cheerio
cheerio是jquery核心功能的一个快速灵活而又简洁的实现,主要是为了用在服务器端需要对DOM进行操作的地方 。
具体代码:
// 请求 url - > html(信息) -> 解析html
const https = require('https');
const cheerio = require('cheerio');
const fs = require('fs');
let pageUrls=[]
for(var i=0 ; i<= 10 ; i++){
pageUrls.push(`https://movie.douban.com/top250?start=${i*25}&filter=`);
}
pageUrls.forEach((item,index)=>{
https.get(item,function(res){
// 分段返回的 自己拼接
let html = '';
// 有数据产生的时候 拼接
res.on('data',function(chunk){
html += chunk;
})
// 拼接完成
res.on('end',function(){
// console.log(html);
const $ = cheerio.load(html);
let allFilms = [];
$('li .item').each(function(){
// this 循环时 指向当前这个电影
// 当前这个电影下面的title
// 相当于this.querySelector
const title = $('.title', this).text();
const star = $('.rating_num',this).text();
const pic = $('.pic img',this).attr('src');
// console.log(title,star,pic);
// 存 数据库
// 没有数据库存成一个json文件 fs
allFilms.push({
title,star,pic
})
})
// 把数组写入json里面
fs.writeFile('./films.json', JSON.stringify(allFilms),function(err){
if(!err){
console.log('文件写入完毕');
}
})
// 图片下载一下
downloadImage(index,allFilms);
})
})
})
function downloadImage(index,allFilms) {
for(let i=0; i<allFilms.length; i++){
let picUrl = allFilms[i].pic;
// 请求 -> 拿到内容
https.get(picUrl,function(res){
res.setEncoding('binary');
let str = '';
res.on('data',function(chunk){
str += chunk;
})
res.on('end',function(){
fs.writeFile(`./images/${index+1}_${i+1}.png`,str,'binary',function(err){
if(!err){
console.log(`第${index+1}页,第${i+1}张图片下载成功`);
}
})
})
})
}
}