需要引入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. 小a的学期 (组合数取模模板)

    题目描述 小a是一个健忘的人,由于他经常忘记做作业,因此老师对他很恼火. 小a马上就要开学了,他学期一共2n 天,对于第i天,他有可能写了作业,也可能没写作业,不过他自己心里还有点B数,因此他会写恰好 ...

  2. 6、Hadoop 2.6.0 运行

    运行方式 Local (Standalone) Mode Pseudo-Distributed Mode Fully-Distributed Mode Standalone Operation $ s ...

  3. POJ P1985 Cow Marathon 题解

    这道题是我们考试的第一题,非常水,就是一个树的直径的板子.详见上一篇博客. #include<iostream> #include<cstdio> #include<cs ...

  4. 开源项目 01 HtmlAgilityPack

    using HtmlAgilityPack; using System; using System.Collections.Generic; using System.Linq; using Syst ...

  5. 在AD中设置漫游配置文件与文件夹重定向

    在域环境下,域用户可以在域中的任意一台客户端计算机上登录,由于普通域用户的权限比较低,在大多数情况下只能对自己的用户配置文件具有完全控制权限,因而大多数域用户都是将数据直接保存在用户配置文件中.用户配 ...

  6. 机器学习---朴素贝叶斯与逻辑回归的区别(Machine Learning Naive Bayes Logistic Regression Difference)

    朴素贝叶斯与逻辑回归的区别: 朴素贝叶斯 逻辑回归 生成模型(Generative model) 判别模型(Discriminative model) 对特征x和目标y的联合分布P(x,y)建模,使用 ...

  7. IOI2019题解

    由于太懒了,好久没更新了.发个题解好了. shoes 首先不难证明鞋子配对一定是从前往后将同一种的左和右配对. 配好对之后首先我们可以假设左在右的左边,然后讨论可知将左边靠前的排在前面更优. rect ...

  8. 原创:史上对BM25模型最全面最深刻的解读以及lucene排序深入讲解

    垂直搜索结果的优化包括对搜索结果的控制和排序优化两方面,其中排序又是重中之重.本文将全面深入探讨垂直搜索的排序模型的演化过程,最后推导出BM25模型的排序.然后将演示如何修改lucene的排序源代码, ...

  9. 第12组 Beta冲刺(1/5)

    Header 队名:To Be Done 组长博客 作业博客 团队项目进行情况 燃尽图(组内共享) 展示Git当日代码/文档签入记录(组内共享) 注: 由于GitHub的免费范围内对多人开发存在较多限 ...

  10. 微信小程序 wxs的简单应用

    Demo地址:微信小程序wxs的简单应用 案例分析 张三.李四.王五,各自分别都有数量不等的车,现在需要列表显示名字及他们拥有车的数量, list数据结构如下,当我们使用wx:for进行显示时,发现个 ...