1. 程式人生 > >Node.js 從網頁下載圖片並替換為新地址

Node.js 從網頁下載圖片並替換為新地址

平常經常需要儲存網頁上的圖片,如果一張一張地儲存會非常麻煩和浪費時間,為了解決這個問題,我寫了一個node.js的指令碼,可以直接用node命令就可以把網頁裡的圖片下載到本地,另外還可以擴充套件為下載其他資源,如cssjsvideo等。

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)); } }); }