Java抓取Codeforces——针对某一次提交的源码和数据
2024-10-21 06:11:34
需要引入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);
}
}
其中,contestId
和 submissionId
分别对应 比赛Id 和 提交Id 。
最新文章
- java 多线程 1 线程 进程
- xcode 一般插件
- 剑指Offer:面试题31——连续子数组的最大和(java实现)
- 关于SilverLight
- 这是啥-Cython语言简单介绍
- NGUI 渲染流程深入研究 (UIDrawCall UIGeometry UIPanel UIWidget)
- 支持阻塞操作和轮询操作的globalfifo设备驱动代码分析以及测试代码
- [Codeforces Round #192 (Div. 2)] D. Biridian Forest
- java--多线程之前台幕后
- 第一百三十四节,JavaScript,封装库--遮罩锁屏
- Effective C++ ——继承与面向对象设计
- obj-c编程01:第一个类和对象的范例
- eShopOnContainers 看微服务③:Identity Service
- [leetcode]Unique Paths @ Python
- Spring Security和JWT实现登录授权认证
- Python机器学习——线性模型
- 使用工厂方法配置bean的两种方式
- pyhon 列表的增删改查
- PCIe调试心得_DMA part2
- SQL点点滴滴_SQL分页查询