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