返回顶部

收藏

抓妹子图

更多

模拟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. 博主 发表 2014-05-30 00:00:00 Google Analytics 不同版本的JS方法介绍
  2. 博主 发表 2017-09-14 00:00:00 ES6 Explorer
  3. alanerzhao 发表 2014-08-15 06:52:54 JavaScript 修炼之道 笔记
  4. sunny5156 发表 2017-12-12 05:55:33 6 大主流 Web 框架优缺点对比
  5. hussion 发表 2013-09-26 15:17:00 Object.prototype & Function.prototype
  6. 王春蕾 发表 2017-12-24 07:05:12 跨平台基础网络框架Mars初探
  7. 博主 发表 2013-11-15 00:00:00 Javascript 中关于对象转换数字值的一些特点
  8. techug 发表 2018-01-03 02:04:37 JavaScript的成本
  9. tyson 发表 2014-04-16 18:09:05 javascript中长字符的拼接优化
  10. 博主 发表 2018-01-15 21:50:40 大概算一个简单的回顾
  11. root 发表 2015-04-22 04:56:01 关于使用Timer定时监测网络是否ping通
  12. Airen 发表 2018-01-23 15:08:32 用SVG和Vanilla JS框架创建一个“星形变心形”的动画效果

发表评论