V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hualishu
V2EX  ›  Node.js

Nodejs 值得收集的代码片段

  •  
  •   hualishu · 2016-02-04 11:18:57 +08:00 · 3415 次点击
    这是一个创建于 3217 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1 、关于 Nodejs 的静态资源压缩与缓存参见: Nodejs 打造静态资源服务器与文件上传刚学 Express 那会,动态文件的 gzip 压缩,好长一段时间都没找到合适的方法,才发现就是这么简单……
    app.js 里添加 compression 模块:
    先安装; var compress=require('compression');app.use(compress()); OK 了动态文件也能 gzip 压缩了;

    2 、抓取妹子的图片:

    复制代码

    ———————————————————————————————————————————————
    //依赖模块
    var fs = require('fs');
    var request = require("request");
    var cheerio = require("cheerio");
    var mkdirp = require('mkdirp');

    //目标网址
    var url = 'http://me2-sex.lofter.com/tag/美女摄影?page=';

    //本地存储目录
    var dir = './images';

    //创建目录
    mkdirp(dir, function(err) {
    if(err){
    console.log(err);
    }
    });

    //发送请求
    request(url, function(error, response, body) {
    if(!error && response.statusCode == 200) {
    var $ = cheerio.load(body);
    $('.img img').each(function() {
    var src = $(this).attr('src');
    console.log('正在下载' + src);
    download(src, dir, Math.floor(Math.random()*100000) + src.substr(-4,4));
    console.log('下载完成');
    });
    }
    });

    //下载方法
    var download = function(url, dir, filename){
    request.head(url, function(err, res, body){
    request(url).pipe(fs.createWriteStream(dir + "/" + filename));
    });
    };
    ———————————————————————————————————————————————

    3 、解压文件

    复制代码

    ——————————————————————————————————————————————
    var fs = require('fs'),

    unzip = require('unzip');

    //fs.createReadStream('./angular-swipe-master.zip').pipe(unzip.Extract({ path: './' }));
    var extract = unzip.Extract({ path: './' });

    extract.on('error', function(err) {

    console.log(err);

    });

    extract.on('finish', function() {

    console.log("unziped!!");

    });

    fs.createReadStream('./angular-swipe-master.zip').pipe(extract);

    ———————————————————————————————————————————————

    压缩文件

    复制代码

    ———————————————————————————————————————————————
    var fs = require("fs");
    var zip = require("node-native-zip");

    var archive = new zip();

    archive.addFiles([

    { name: "app.j", path: "./app.js" },
    { name: "package.json", path: "./package.json" }
    ], function (err) {
    if (err) return console.log(err);

    var buff = archive.toBuffer(); 
    
    fs.writeFile("./test2.zip", buff, function () { 
        console.log("ziped"); 
    });
    

    });
    ———————————————————————————————————————————————

    hualishu
        1
    hualishu  
    OP
       2016-02-04 11:20:24 +08:00
    这几个片段 可以保存下来 挺好用的
    chemzqm
        2
    chemzqm  
       2016-02-04 11:23:34 +08:00
    gzip 用 nginx 配置更方便控制,其它的 shell 脚本更灵活,做抓取还是 python 的库多些, node 的优势是异步和 stream 可以很大程度提高 io 效率
    hualishu
        3
    hualishu  
    OP
       2016-02-04 12:00:02 +08:00
    @chemzqm 抓取 我自己比较喜欢 node
    breeswish
        4
    breeswish  
       2016-02-04 13:59:04 +08:00
    nodejs 简单到可以轻易自己造一个爬虫了..
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3730 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 00:52 · PVG 08:52 · LAX 16:52 · JFK 19:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.