代码如下:

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);

用于抓取vijos所有题目信息的node.js脚本的更多相关文章

  1. Python 抓取网页并提取信息(程序详解)

    最近因项目需要用到python处理网页,因此学习相关知识.下面程序使用python抓取网页并提取信息,具体内容如下: #---------------------------------------- ...

  2. 简单的抓取淘宝关键字信息、图片的Python爬虫|Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)

    Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇) 淘宝改字段,Bugfix,查看https://github.com/hunterhug/taobaoscrapy.git 由于Gith ...

  3. 使用node.js抓取有路网图书信息(原创)

    之前写过使用python抓取有路网图书信息,见http://www.cnblogs.com/dyf6372/p/3529703.html. 最近想学习一下Node.js,所以想试试手,比较一下http ...

  4. 用python抓取智联招聘信息并存入excel

    用python抓取智联招聘信息并存入excel tags:python 智联招聘导出excel 引言:前一阵子是人们俗称的金三银四,跳槽的小朋友很多,我觉得每个人都应该给自己做一下规划,根据自己的进步 ...

  5. 使用python抓取58手机维修信息

    之前在ququ的博客上看到说 python 中的BeautifulSoup 挺好玩的,今天下午果断下载下来,看了下api,挺好用的,完了2把,不错. 晚上写了一个使用python抓取58手机维修信息的 ...

  6. Selenium模拟浏览器抓取淘宝美食信息

    前言: 无意中在网上发现了静觅大神(崔老师),又无意中发现自己硬盘里有静觅大神录制的视频,于是乎看了其中一个,可以说是非常牛逼了,让我这个用urllib,requests用了那么久的小白,体会到sel ...

  7. python抓取链家房源信息(二)

    试着用scrapy将之前写的抓取链家网信息的重新写了写 然后先是用了第一页的网页作为测试,调试代码,然后发现总是抓取的时候遇见了 类似于这样的问题,并且抓取不到信息 2017-03-28 17:52: ...

  8. SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享

    SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享 第一步建库和建表 USE [master] GO CREATE DATABASE [MonitorElapsedHighSQL] G ...

  9. 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(2): 抓取allitebooks.com书籍信息及ISBN码

    这一篇首先从allitebooks.com里抓取书籍列表的书籍信息和每本书对应的ISBN码. 一.分析需求和网站结构 allitebooks.com这个网站的结构很简单,分页+书籍列表+书籍详情页. ...

随机推荐

  1. 转 OJDBC驱动版本区别 [ojdbc14.jar,ojdbc5.jar跟ojdbc6.jar的区别]

    OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别] 在使用Oracle JDBC驱动时,有些问题你是不是通过替换不同版本的Oracle  JDBC驱动来解 ...

  2. myeclipse常用快捷(持续更新)

    最近开始转用myeclipse,总结一下快捷方式:(我喜欢用的) [Ctrl+O]    显示类中方法和属性的大纲,能快速定位类的方法和属性,在查找Bug时非常有用. [Ctrl+M]    窗口最大 ...

  3. Dubbo源码分析:Exchanger

    实现此接口获取Server服务. 实现的类只有HeaderExchanger类. 方法 时序图

  4. MongoDB TTL集合与固定集合

    1.固定集合     MongoDB可以创建固定长度的集合,可以设置最大的集合空间或最大的集合数.创建集合的语法如下:     db.createCollection("collection ...

  5. HTTP协议(待写)

    先来了解了解 TCP/IP TCP/IP(Transmission Control Protocol / Internet Protocol)是计算机通讯必须遵守的规则,是不同的通信协议的大集合,其里 ...

  6. vue-cli搭建SPA项目

    1. 什么是vue-cli? vue-cli是vue.js的脚手架,用于自动生成vue.js+webpack的项目模板,创建命令如下: vue init webpack xxx 2. 安装vue-cl ...

  7. 在触发器中使用{ITEM.LASTVALUE}时在首页问题栏信息显示不全

    在触发器中使用了系统宏变量,当条件满足时,如果这个宏代表的内容超过了20个字符,那么在首页信息就显示不全,会有一堆省略号 感谢https://blog.csdn.net/yu415907917/art ...

  8. 单页面应用程序(SPA)

    一.概念 ①在一个页面上实现网站的大部分功能,就是单页面应用程序,是一种常见的网页开发模式. ②整个网站就只有一个Html文件,每次在切换页面时,不需要请求服务器,只要通过本地的js来切换即可.这样可 ...

  9. 2-STM32+W5500+GPRS(2G)基础篇-(W5500-学习说明)

    https://www.cnblogs.com/yangfengwu/p/11220042.html 定版: 这一节先直接说明怎么把官方的源码应用在我做的这块开发板上 https://www.w550 ...

  10. 洛谷 P4779 【模板】单源最短路径(标准版) 题解

    P4779 [模板]单源最短路径(标准版) 题目背景 2018 年 7 月 19 日,某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路. 然后呢? 100 ...