• 用于抓取vijos所有题目信息的node.js脚本


    代码如下:

    var superagent = require('superagent');
    var fs = require('fs');
    
    /*
    fetch_vijos_problems
    这个脚本用于获取vijos里面的所有题目的描述和信息。
    注意:因为1000至1099已经有信息了,所以题目好顺延100。
    */
    
    var fetchProblem = function (problemId, callback) {
        var url = "https://vijos.org/p/" + problemId;
        superagent.get(url)
            .end( (err, res)=> {
                if (err) {
                    console.log("[error fetch]" + url);
                    if (callback) 
                        callback();
                } else {
                    // console.log(res.text);
                    var html = res.text;
                    var titleIdx1 = html.indexOf('<title>');
                    var titleIdx2 = html.indexOf('</title>');
                    var title = html.substr(titleIdx1+7, titleIdx2-titleIdx1-15);
                    var idx = html.indexOf("section__body typo");
                    html = html.substr(idx+21);
                    idx = html.indexOf("</div>");
                    html = html.substr(0, idx).trim();
                    var dir = `${__dirname}/../moon-web/resources/problems/${problemId+100}`;
                    if (fs.existsSync(dir) == false) {
                        fs.mkdirSync(dir);
                    }
                    var info = {
                        "id": "" + (problemId + 100),
                        "title": title,
                        "tags": []
                    }
                    var descriptionFile = `${dir}/description.html`;
                    var infoFile = `${dir}/info.json`;
                    fs.writeFileSync(descriptionFile, html, 'utf8');
                    fs.writeFileSync(infoFile, JSON.stringify(info), 'utf8');
                    if (callback) 
                        callback();
                }
            } );
    }
    
    // 获取vijos所有题目,编号1000 - 2056
    var fetchProblems = function (problemId) {
        console.log(`fetch ${problemId} ...`);
        setTimeout(()=>{
            fetchProblem(problemId, ()=>{
                console.log(`fetch ${problemId} finished.`);
                if (problemId < 2056)
                    fetchProblems(problemId+1);
            });
        }, 1000);
    }
    
    fetchProblems(1000);
    
  • 相关阅读:
    keepAliveTime为0以及队列太小导致ThreadPoolExecutor不断创建新线程
    Python str方法
    Python 复制与赋值
    Python 使用pypi镜像源加速第三方库在线安装
    Python ez_setup.py安装错误
    Tools psr
    Python 列表生成试中的if,if else
    Python 执行方法shift+enter
    Python
    DOS 切换文件夹
  • 原文地址:https://www.cnblogs.com/zifeiy/p/10951498.html
Copyright © 2020-2023  润新知