返回顶部

收藏

抓妹子图

更多

模拟Pyhton的代码,使用node.js从百度姐脱吧抓妹子图。

使用了node-jquery, NPM添加的时候需要VC++2010的支持。

var baidu_base_url = 'http://tieba.baidu.com';

var http = require('http');
var url = require('url').parse(baidu_base_url + '/f?ie=utf-8&kw=%E5%A7%90%E8%84%B1');
var iconv = require('iconv-lite');
var BufferHelper = require('bufferhelper');
var $ = require('jquery');
var _ = require('underscore');
var saveRoot = "O:\\baidu\\"; //
var fs = require('fs');

String.prototype.replaceAll = function(s1, s2) {
    var demo = this
    while (demo.indexOf(s1) != - 1)
    demo = demo.replace(s1, s2);
    return demo;
}

function htmlBufferget(Url, callback) {
    http.get(Url, function(res) {
        var bufferHelper = new BufferHelper();
        res.on('data', function(chunk) {
            bufferHelper.concat(chunk);
        });
        res.on('end', function() {
            callback(bufferHelper.toBuffer());
        });
    });
}

//
function htmlget(Url, callback) {
    http.get(Url, function(res) {
        var bufferHelper = new BufferHelper();
        res.on('data', function(chunk) {
            bufferHelper.concat(chunk);
        });
        res.on('end', function() {
            var html = iconv.decode(bufferHelper.toBuffer(), 'GBK');
            callback($(html));
        });
    });
}

// 
function getTieZiImg(url, fold) {
    htmlget(url, function(html) {
        html.find('img.BDE_Image').each(function(i, el) {
            var $img = $(el);
            var imgUrl = $img.attr('src');
            htmlBufferget(imgUrl, function(buffer) {
                var fileName = fold + "/" + i + ".png";
                fs.writeFile(fileName, buffer, 'binary', function(err) {
                    if (err) throw err ;
                    console.log(fileName + '  File saved.');
                });
            });
        });
    });
}

//
htmlget(url, function(html) {
    html.find('a.j_th_tit').each(function(i, el) {
        var $a = $(el);
        var tieziUrl = baidu_base_url + $a.attr("href");
        var foldID = $a.attr("href").toString().replaceAll("/p/", "");
        var title = $a.html();
        //
        title = title.replaceAll("/", "");
        title = title.replaceAll("?", "");
        title = title.replaceAll(",", "");
        title = title.replaceAll(":", "");

        //for
        (function(tieziUrl, title, foldID) {
            _.delay(function() {
                var fold = saveRoot + title;
                var exists = fs.existsSync(fold);
                console.log(fold);
                if (!exists) {
                    console.log("" + fold);
                    fs.mkdirSync(fold);
                }
                getTieZiImg(tieziUrl, fold);
            },
            10);
        })(tieziUrl, title, foldID);
    });
});
//该片段来自于http://outofmemory.cn

标签:javascript,网络

收藏

0人收藏

支持

0

反对

0

相关聚客文章
  1. 潘魏增 发表 2008-01-27 18:20:00 用JavaScript操作硬盘文件
  2. 十年灯 发表 2016-08-05 03:46:44 Javascript神技:快速判断两个DOM节点是否相同-Node.isEqualNode()
  3. Freewind 发表 2011-09-12 17:21:59 CoffeeScript
  4. zak 发表 2016-08-15 03:47:19 vue双向绑定
  5. Freewind 发表 2012-05-12 16:48:24 JavaScript/NodeJs半月总结
  6. 歪脖骇客 发表 2016-08-25 15:55:31 理解 javascript 里的 bind() 函数
  7. Freewind 发表 2013-01-01 08:29:24 09. 介绍
  8. 靖哥哥 发表 2016-08-29 11:11:12 Opera密码服务器被入侵
  9. Freewind 发表 2013-01-01 08:40:08 28. 创建Services
  10. Airen 发表 2016-09-03 06:31:17 【转载】JavaScript基于时间的动画算法
  11. 发表 2014-08-10 13:12:51 免安装的安全软件扫描器
  12. xnnyygn 发表 2016-09-01 12:51:28 网络编程中的半包粘包问题

发表评论