1. 起因
最近看到 网站 fhl.net 上有一系列《圣地旅游》的照片,个人很喜欢,想把它下载下来保存。问题是该网站上有67页,每页有35张照片,也就是总共有2345张照片,同时我还想讲网页上照片的介绍作为照片的名称保存,这样方便以后查看。所以,问题是如何做呢?
2. 所需 tools
鉴于最近爱上了 Node.js 这一神奇的工具。打算用它试试。
2.1 用到的插件有
- request
npm install request
处理http request - cheerio
npm install cheerio
Html DOM 处理 - iconv-lite
npm install iconv-lite
处理中文字符转码 - wget
npm install wget
图片下载工具
3. 代码 Code
var request = require("request");
var cheerio = require("cheerio");
var iconv = require('iconv-lite');
var wget = require('wget');
// loop through all 67 html pages
for(var i = 1; i < 67; i++){
(function(i){request({
uri: "http://photo.fhl.net/main/holy/"+i+"index.html",
encoding:null
}, function(error, response, body) {
var str = iconv.decode(new Buffer(body), "big5");
var $ = cheerio.load(str);
$('table a').each(function() {
var link = $(this);
var text = link.text();
var href = link.attr("href");
// href = "holy2351.html"
// http://photo.fhl.net/img/holy/2351.jpg
// console.log(text + "http://photo.fhl.net/img/holy/" + href.substr(4,4) + ".jpg");
var src = "http://photo.fhl.net/img/holy/" + href.substr(4,4) + ".jpg";
// var output ="/Users/shuangjiang/playpen/holypic/"+text.replace(/\s+/g,"");
var output ="/Users/shuangjiang/playpen/holypic/"+text+".jpg";
var download = wget.download(src,output);
download.on('end', function(output) {
console.log("download all the pics");
});
});
});})(i); // closure
}
That’s it!!