npm install
npm start
- 确定目标页面(豆瓣)
- 使用superagent库来获取页面
- 分析页面结构,使用cheerio 获取有效信息
- 保存图片到本地
本项目需要使用的库
npm i superagent cheerio fs-extra --save
这儿我们用到了superagent
cheerio
fs-extra
这三个库
- superagent 是nodejs里一个非常方便的客户端请求代理模块
- cheerio:为服务器特别定制的,快速、灵活、实施的jQuery核心实现
- fs-extra: 丰富了fs模块,同时支持async/await
使用superagent发起请求获取页面内容
const request = require('superagent')
const cheerio = require('cheerio')
const fs = require('fs-extra')
let url = 'https://movie.douban.com/top250?start=0';
request.get(url + i * PAGE_SIZE);
获取到单个图片URL后,我们可以通过图片的src
属性去拿到真实的图片地址,然后实现下载保存
// 获取海报图片路径
async function getPosterUrls () {
let imgURls = [];
for (let i = 0; i < 5; i++) {
const res = await request.get(url + i * PAGE_SIZE);
const $ = cheerio.load(res.text);
$('.grid_view li').each(function() {
let imgUrl = $(this).find('img').attr('src');
imgURls.push(imgUrl);
})
}
return imgURls;
}
现在我们就来实现下载保存图片的方法,这儿我们使用了stream
(流) 来保存图片
// 下载每一张图片保存到本地
async function getPoster (url) {
// 检测图片是否已经存在,如果不存在则下载
let isExist = isExistImg(url);
if(!isExist) {
let fileName = url.split('/').pop();
let dir = path.join(__dirname,'/',DIR,'/',fileName);
const req = await request.get(url);
req.pipe(fs.createWriteStream(dir));
}
}