有需求就有动力,你懂的…
才学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));
});
};