需要引入Jsoup依赖:

		<dependency>
<!-- jsoup HTML parser library @ https://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>

Jsoup相关依赖:https://jsoup.org/

其他需要的是 FileHelper 类,参见:https://www.cnblogs.com/zifeiy/p/9224569.html

(不过我们这边可能需要将"UTF-8"改成"GBK" ~)

然后实现的类如下:

package com.zifeiy.cf_data_get.handle;

import java.io.File;
import java.io.IOException; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements; import com.zifeiy.cf_data_get.assist.FileHelper; public class SubmissionInfoGet { public void getSubmission(int contestId, int submissionId) throws IOException {
String urlString = "http://codeforces.com/contest/" + contestId + "/submission/" + submissionId;
Document doc = Jsoup.connect(urlString).get();
System.out.println("title = " + doc.title()); String dirString = "D:/codeforces/" + submissionId;
File dir = new File(dirString);
if (dir.exists() == false) dir.mkdirs();
File dataDir = new File(dirString + File.separator + "data");
if (dataDir.exists() == false) dataDir.mkdirs(); // 代码
String codeString = doc.getElementById("program-source-text").text();
File codeFile = new File(dirString + File.separator + "std.cpp");
FileHelper.writeFile(codeFile, codeString);
Elements inputElements = doc.getElementsByClass("file input-view");
Elements outputElements = doc.getElementsByClass("file answer-view");
int sz = inputElements.size();
int cnt = 0;
for (int i = 0; i < sz; i ++) {
String inputTextString = inputElements.get(i).getElementsByClass("text").get(0).text();
String outputTextString = outputElements.get(i).getElementsByClass("text").get(0).text();
if (inputTextString.endsWith("...") == false) {
// System.out.println("[input]\n" + inputTextString + "\n[output]\n" + outputTextString + "\n[end]");
cnt ++;
File inputFile = new File(dirString + File.separator + "data" + File.separator + cnt + ".in");
FileHelper.writeFile(inputFile, inputTextString);
File outputFile = new File(dirString + File.separator + "data" + File.separator + cnt + ".out");
FileHelper.writeFile(outputFile, outputTextString);
}
} } // main for test
public static void main(String[] args) throws IOException {
new SubmissionInfoGet().getSubmission(1169, 54847813);
} }

其中,contestIdsubmissionId 分别对应 比赛Id 和 提交Id 。

Java抓取Codeforces——针对某一次提交的源码和数据的更多相关文章

  1. java 抓取网页图片

    import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.Out ...

  2. Java抓取网页数据

    http://ayang1588.github.io/blog/2013/04/08/catchdata/ 最近处于离职状态,正赶清闲,开始着手自己的毕业设计,课题定的是JavaWeb购物平台,打算用 ...

  3. Java学习-025-类名或方法名应用之一 -- 调试源码

    上文讲述了如何获取类名和方法名,敬请参阅: Java学习-024-获取当前类名或方法名二三文 . 通常在应用开发中,调试或查看是哪个文件中的方法调用了当前文件的此方法,因而在实际的应用中需要获取相应的 ...

  4. Java开源生鲜电商平台-订单表的设计(源码可下载)

    Java开源生鲜电商平台-订单表的设计(源码可下载) 场景分析说明: 买家(餐馆)用户,通过APP进行选菜,放入购物车,然后下单,最终支付的流程,我们称为下单过程. 买家可以在张三家买茄子,李四家买萝 ...

  5. java画图程序_图片用字母画出来_源码发布_版本二

    在上一个版本:java画图程序_图片用字母画出来_源码发布 基础上,增加了图片同比例缩放,使得大像素图片可以很好地显示画在Notepad++中. 项目结构: 运行效果1: 原图:http://imag ...

  6. Java开源生鲜电商平台-盈利模式详解(源码可下载)

    Java开源生鲜电商平台-盈利模式详解(源码可下载) 该平台提供一个联合买家与卖家的一个平台.(类似淘宝购物,这里指的是食材的购买.) 平台有以下的盈利模式:(类似的平台有美菜网,食材网等) 1. 订 ...

  7. Java开源生鲜电商平台-用户表的设计(源码可下载)

    Java开源生鲜电商平台-用户表的设计(源码可下载) 说明:由于该系统属于B2B平台,不设计到B2C的架构. 角色分析:买家与卖家. 由于买家与卖家所填写的资料都不一样,需要建立两站表进行维护,比如: ...

  8. Java开源生鲜电商平台-商品表的设计(源码可下载)

    Java开源生鲜电商平台-商品表的设计(源码可下载) 任何一个电商,无论是B2C还是B2B的电商,商品表的设计关系到整个系统架构的核心. 1. 商品基本信息表:用单词:goods做为商品表 2. 商品 ...

  9. Java 抓取网页中的内容【持续更新】

    背景:前几天复习Java的时候看到URL类,当时就想写个小程序试试,迫于考试没有动手,今天写了下,感觉还不错 内容1. 抓取网页中的URL 知识点:Java URL+ 正则表达式 import jav ...

随机推荐

  1. Good Numbers(HDU5447+唯一分解)

    题目链接 传送门 题面 题意 首先定义对于\(k\)的好数\(u\):如果\(u\leq k\)且\(u\)的所有质因子与\(k\)的质因子一样则称\(u\)对于\(k\)是一个好数. 现给你两个数\ ...

  2. linux下写tomcat启动,重启的脚本

    启动: #bash/bin cd /finance/ LANG="en_US.UTF-8" export LANG /finance/tomcat8-finance/bin/cat ...

  3. delete,drop,truncate的区别?

    drop:是删除表的结构 delete:删除表的数据 truncate:删除表的数据,并且对id进行重新排序.

  4. Spring容器、BeanFactory和ApplicationContext,及3种装配Bean的方式

    目录 一. spring容器理解 二. BeanFactory和ApplicationContext之间的关系 三. BeanFactory详情介绍 四.ApplicationContext介绍 五. ...

  5. 读取yaml文件小方法

    def read_inf(inf_path): '''读取指定路径配置文件''' try: import yaml fr = open(inf_path) fy = yaml.load(fr) fr. ...

  6. danci4

    advantage 英 [əd'vɑːntɪdʒ] 美 [əd'væntɪdʒ] n. 优势:利益:有利条件 vi. 获利 vt. 有利于:使处于优势 lack 英 [læk] 美 [læk] vt. ...

  7. Spring源码窥探之:声明式事务

    1. 导入驱动,连接池,jdbc和AOP的依赖 <!-- c3p0数据库连接池 --> <dependency> <groupId>c3p0</groupId ...

  8. gulp-htmlmin 页面压缩插件 gulp插件 参数说明

    gulpfile.js var gulp = require('gulp'), htmlmin = require('gulp-htmlmin'); gulp.task('testHtmlmin', ...

  9. linux 读取文件

    linux读取文件是经常要用到的操作,以下示例(说明看注释): #读取文件snlist.txt中的每一行内容赋给sn变量 while read sn do echo ">>> ...

  10. am335x system upgrade set/get current cpufreq(二十一)

    1      Scope of Document This document describes am335x cpufreq technology insider. 2      Requireme ...