版权声明:本文为博主原创文章,欢迎转载,转载时请以超链接形式标明文章原始出处。 https://blog.csdn.net/lilongsy/article/details/84346187
平常经常需要保存网页上的图片,如果一张一张地保存会非常麻烦和浪费时间,为了解决这个问题,我写了一个node.js
的脚本,可以直接用node命令就可以把网页里的图片下载到本地,另外还可以扩展为下载其他资源,如css
、js
、video
等。
var data = `
<!DOCTYPE html>
<html>
<head>
<title></title>
<body>
<div id="content">
<img src="https://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png"/>
</div>
</body>
</html>
`;
const cheerio = require('cheerio');
const request = require('request');
const fs = require('fs');
const path = require('path')
const moment = require('moment')
const md5=require('md5-node');
let $ = cheerio.load(data);
$('#content img').each(function(i, ele){
// 图片地址
let src = $(this).attr('src');
console.log(src);
let fn = filename(src)
download(src, "./imgs", fn);
// 设置为新的地址
$(this).attr('src', "/imgs/"+ fn);
console.log($.html('#content'));
});
// md5文件地址,防止重复下载
function filename(src) {
// 扩展名
let type = path.extname(src);
// 一天内的地址不重复下载
let dt = moment().format('YYYY-MM-DD');
return md5(src + dt) + '.' + type;
}
// 递归创建目录
function mkdir(dirname) {
if (fs.existsSync(dirname)) {
return true;
} else {
if (mkdir(path.dirname(dirname))) {
fs.mkdirSync(dirname);
return true;
}
}
return false;
}
// 下载文件到指定目录
function download(uri, dir, filename) {
request.head(uri, function(err, res, body){
if(mkdir(dir)) {
request(uri).pipe(fs.createWriteStream(dir+"/"+filename));
}
});
}