先奉上圖夫地址:https://tufu.xkboke.comvue
GIT開源地址:git地址(歡迎star)node
有時候在站酷或者UI中國看到很好的圖片和做品都會想收藏下來學習一下,可是每次右擊另存爲都很麻煩,並且有的還要放大後纔有原圖能夠下載;做爲一個僞全棧怎麼能忍呢,而後就想着扒扒他們網站的源碼看,這一看發現圖片原圖存放的位置都有着規律,這就很高興啦,哈哈!ios
浪起來!!很快完成了第一個小腳本,順利把須要的圖片下載了下來,但只是最簡單的爬取圖片,後來優化了一下,把每次下載的圖片都放到不一樣文件夾。可是轉頭一想,獨樂樂不如衆樂樂,就想着乾脆把這個腳本工具化,作一個能夠兼容多個網站的爬蟲工具,而且能夠批量下載原圖,想法很快被付諸實踐,通過不斷的改版後,終於個人圖夫出來了初版。git
一開始只支持站酷和UI中國,並且對其餘的網站都兼容的不是很好,不要緊,先作出初版,接着慢慢迭代,後來根據反饋又添加了塗鴉王國,設計癖,視覺ME等網站,最近幾天在逛貼吧,發現貼吧的一些圖片也是很漂亮,有不少能夠當壁紙的圖片,可是要下到原圖須要三四次步驟,並且一次只能下載一個,因此呢,我又把它加入個人圖夫工具中了,哈哈!個人圖夫又慢慢壯大起來了!先放一張圖展現一下個人圖夫 github
其實原理你們都知道的,就是爬蟲,只是我把爬蟲可視化作成了一個工具,方便平常使用而已,這裏主要使用的是express
,庫的話用的是request
,compressing
用來壓縮文件夾,node-uuid
用來生成隨機hash;放一張目錄結構 mongodb
index.js 主要請求文件,其餘文件就移步git查看吧express
const path = require('path');
const fs = require('fs');
const analyze = require('./analyze');
const tarTool = require('./tarTool')
const uuid =require('node-uuid')
/**
* 根據hash值建立文件夾
* @param path
*/
function write(path) {
fs.exists(path, function (exists) { //path爲文件夾路徑
if (!exists) {
fs.mkdir(path, function (err) {
if (err) {
console.log('建立失敗');
return false;
} else {
console.log('建立成功');
}
})
}
})
}
/**
* 請求圖片地址
* @param response
* @param req
* @param next
*/
function start(req,response,next) {
const hash = uuid.v1().replace(/-/g, "")
const imgDir = path.join(path.resolve(__dirname, '..'), 'output/img/'+hash);
write(imgDir)
// 發起請求獲取 DOM
console.log('請求地址',req.url);
request(req.url, function(err, res, body) {
if (!err && res) {
console.log('start');
// 將 downLoad 函數做爲參數傳遞給 analyze 模塊的 findImg 方法
analyze.findImg(body,req.type,imgDir,downLoad,req.url);
response.json({head: {code: 0, msg: 'ok'}, data: hash})
}else {
response.json({head: {code: 1000, msg: err}, data: ''})
}
});
}
/**
* 獲取到 findImg 函數返回的圖片地址後,利用 request 再次發起請求,將數據寫入本地。
*
* @param {*} imgUrl
* @param {*} i
* @param {*} imgDir
*/
function downLoad(imgUrl, i,imgDir) {
console.log('圖片地址',imgUrl);
let ext = imgUrl.split('.').pop();
// 再次發起請求,寫文件
request(imgUrl).pipe(fs.createWriteStream(path.join(imgDir, i + '.' + ext), {
'encoding': 'utf8',
}));
}
/**
* 下載圖片到本地後,利用tar壓縮成一個壓縮包,並返回路徑
* @param {*} req
* @param {*} response
* @param {*} next
*/
function tarFile(req,response,next) {
console.log('接收',req);
tarTool.tarTool(req.path,response)
}
module.exports= {
getImg:start,
tarTool:tarFile
}
複製代碼
固然既然是工具,就必須很是簡單啦,你只需複製你要下載頁面的URL連接,而後粘貼到個人輸入框中就能夠,而後選擇網站類型(固然悄悄告訴你,不選也不要緊,我作了一個校驗),而後就是點擊搜索了,接下來就是耐心的等待...loading....(由於服務器的帶寬只有1M,因此會下載有點慢,若是你願意打賞一下,我也是不介意的,哈哈),執行完畢後,會出現下載按鈕,你只須要點擊下載便可下載打包完畢的文件了。json
本工具僅做爲技術交流工具,不得用於任何商業用途或獲利。本網站不存儲任何圖片,全部內容均經過爬蟲工具爬取網頁上存在的內容。經過本網站下載的任何圖片不表明你擁有商用的權利或者受權,如需受權或商用請聯繫原網站做者或平臺,謝謝理解!bootstrap
最後,奉上個人開源GIT地址:https://github.com/gengchen528/imgSpider 圖夫網站地址:https://tufu.xkboke.comaxios
若是喜歡的話,請給個star,若是有什麼想法的話能夠提issues,也能夠微信聯繫我,歡迎交流,也可在評論中留下你想採集的網站連接,我會不按期更新圖夫徹底支持的網站
使用node腳本全自動刪除豆瓣評論與帖子(這個最近正在更新,也會上線可視化操做,敬請關注)
基於mongodb+express+vue+axios+bootstrap的掘金最熱文章收藏評論分析
我的博客:www.xkboke.com