node.js 批量下载百度贴吧图片

有需求就有动力,你懂的…

才学Node.js,如法炮制了一个脚本,有不足之处多多指教!

用法:
指定要下载的贴吧URL,node执行即可。(默认是第一页50个帖子)
图片保存在以帖子id命名的文件夹中,由于百度返回的是gbk编码,貌似node.js不支持非utf-8 显示乱码,只能用id当文件夹名字了。

依赖: jquery,request,mkdirp 用npm 安装即可。

//
//  By hmmabc@OSC
//

var fs = require('fs');
var mkdirp = require('mkdirp');
var request = require('request');
var $ = require('jquery').create();

//萌妹吧
//var url = "http://tieba.baidu.com/f?ie=utf-8&kw=%E8%90%8C%E5%A6%B9%E5%AD%90";
//美女吧
//var url = "http://tieba.baidu.com/f?ie=utf-8&kw=%E7%BE%8E%E5%A5%B3";
//黑丝吧
var url = "http://tieba.baidu.com/f?ie=utf-8&kw=%E9%BB%91%E4%B8%9D";

var baseUrl = "http://tieba.baidu.com";
var posts = [];
var count = 0;

$.get(url,function(data){
	$(data).find("a.j_th_tit").each(function(){
		posts.push({title: this.title,url: baseUrl + $(this).attr("href")});
	});
	console.log("共有帖子"+posts.length);
	$.each(posts,function(index,post){
		downpost(post.url);
	});
});

var downpost = function(url){
	$.get(url,function(data){
		var imgs = [];
		var dir = "";
		$(data).find(".BDE_Image").each(function(){
			imgs.push(this.src);
		});
		if(imgs.length == 0) return;
		dir = url.match(/\d+$/)[0];
		mkdirp(dir,function(err){
			if(err) console.log(err);
		});
		$.each(imgs,function(index,value){
			download(value,dir,Math.floor(Math.random()*100000)+ value.substr(-4,4));
		});
		console.log("已完成" + ++count);
	});
}

var download = function(uri, dir,filename){
	request.head(uri, function(err, res, body){
		request(uri).pipe(fs.createWriteStream(dir + "/" + filename));
	});
};