写在前面
作为信息学竞赛和编程认证领域的常客,GESP(Grade Examination of Software Programming)真题是备考过程中不可或缺的资料。但官网的真题分散在不同页面,手动下载整理非常耗时。今天分享一个Python工具,可以自动抓取GESP官网的真题列表,按时间范围筛选,并自动分类下载PDF文件。
先看效果:运行脚本后,输入数字选择范围,工具会自动解析页面、提取下载链接、按年份月份和编程语言分类保存。
工具特点
自动抓取:遍历官网分页,获取全部真题列表
智能筛选:支持查看最新真题、近一年真题或全部真题
自动分类:按C++、Python、图形化编程分类保存
本地缓存:真题列表保存为JSON,避免重复请求
彩色输出:终端显示更清晰
环境准备
1. 安装Python
确保你的电脑已安装Python 3.6或更高版本。在终端输入:
python3 --version
如果没有安装,请前往python.org下载安装。
2. 安装依赖库
本工具需要requests和beautifulsoup4两个库。在终端执行:
pip3 install requests beautifulsoup4
也可使用清华镜像加速:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests beautifulsoup4
3. 创建项目目录
mkdir -p ~/Downloads/GESP
cd ~/Downloads/GESP
4. 创建工具文件
新建一个文本文件,命名为gesp.py,代码太多,可以前往文末下载。
5. 运行工具
在终端中进入项目目录,执行。
打开终端 / 命令行,切换到gesp.py所在的目录(比如下载到了 Downloads/GESP 文件夹)
cd /Users/你的用户名/Downloads/GESP
执行脚本:
python3 gesp.py
或者直接执行组合的代码:
cd /Users/你的用户名/Downloads/GESP && python3 gesp.py
然后就会进行交互
正在检查真题列表...
正在加载页面: https://gesp.ccf.org.cn/101/1010/index.html
本页发现 10 条真题记录
正在加载页面: https://gesp.ccf.org.cn/101/1010/index_2.html
本页发现 4 条真题记录
检查完毕,共发现 14 条真题记录
交互流程
1. 选择时间范围
text
============================================================
GESP真题下载工具
============================================================
请选择要查看的真题范围:
1. 显示最新真题(最近一次发布)
2. 显示最近一年真题
3. 显示全部真题
0. 退出
============================================================
请输入对应数字:
2. 选择要下载的真题
============================================================
GESP真题下载工具
============================================================
请选择要查看的真题范围:
1. 显示最新真题(最近一次发布)
2. 显示最近一年真题
3. 显示全部真题
0. 退出
============================================================
请输入对应数字:
2. 选择要下载的真题
输入数字后,工具会列出符合条件的真题。例如选择3(全部真题):
============================================================
真题列表
============================================================
1. 2026年3月GESP认证真题 2026-03-15 GESP2026年3月认证真题
日期: 2026-03-15
链接: https://gesp.ccf.org.cn/101/1010/10269.html
2. 2025年12月GESP认证真题 2025-12-29 GESP2025年12月认证真题
日期: 2025-12-29
链接: https://gesp.ccf.org.cn/101/1010/10242.html
3. 2025年9月GESP认证真题 2025-09-30 GESP2025年9月认证真题
日期: 2025-09-30
链接: https://gesp.ccf.org.cn/101/1010/10229.html
4. 2025年6月GESP认证真题 2025-06-29 GESP2025年6月认证真题
日期: 2025-06-29
链接: https://gesp.ccf.org.cn/101/1010/10217.html
......
============================================================
请输入要下载的真题序号 (0 退出):
3.确认下载
输入序号后,工具会解析详情页并显示找到的PDF文件。例如输入 1
正在解析真题详情页: https://gesp.ccf.org.cn/101/1010/10269.html
发现 18 个PDF文件
确认开始下载全部PDF文件?(y/n):
输入y开始下载。
开始下载全部PDF文件...
下载: CCF GESP 2026年3月认证 图形化编程 1级试题
保存到: /Users/alexwang/Downloads/GESP/GESP真题/2026_03/图形化编程/2026_03_图形化编程_1级.pdf
文件大小: 1.41 MB
下载进度: 100.0%
========================================
下载完成!
========================================
下载: CCF GESP 2026年3月认证 图形化编程 2级试题
保存到: /Users/alexwang/Downloads/GESP/GESP真题/2026_03/图形化编程/2026_03_图形化编程_2级.pdf
文件大小: 0.99 MB
下载进度: 100.0%
========================================
下载完成!
========================================
......
============================================================
下载完成
成功: 18 个
失败: 0 个
文件保存位置: /Users/你的用户名/Downloads/GESP/GESP真题
============================================================
是否继续操作?(y/n):
目录结构示例
GESP/
├── GESP真题/
│ └── 2026_03/
│ ├── 图形化编程/
│ │ ├── 2026_03_图形化编程_1级.pdf
│ │ ├── 2026_03_图形化编程_2级.pdf
│ │ ├── 2026_03_图形化编程_3级.pdf
│ │ └── 2026_03_图形化编程_4级.pdf
│ │
│ ├── C++/
│ │ ├── 2026_03_C++_1级.pdf
│ │ ├── 2026_03_C++_2级.pdf
│ │ ├── 2026_03_C++_3级.pdf
│ │ ├── 2026_03_C++_4级.pdf
│ │ ├── 2026_03_C++_5级.pdf
│ │ ├── 2026_03_C++_6级.pdf
│ │ ├── 2026_03_C++_7级.pdf
│ │ └── 2026_03_C++_1级.pdf
│ │
│ └── Python/
│ ├── 2026_03_Python_1级
│ ├── 2026_03_Python_2级
│ ├── 2026_03_Python_3级
│ ├── 2026_03_Python_4级
│ ├── 2026_03_Python_5级
│ └── 2026_03_Python_6级
│
├── gesp.py # 主程序
│
└── gesp_data.json # 真题列表缓存
常见问题
Q1: 运行时报错“No module named ‘requests’”
说明没有安装依赖库。执行:
pip3 install requests beautifulsoup4
Q2: 下载速度很慢或失败
检查网络连接,或者手动将代码中的超时时间调大(timeout=60改为timeout=120)。
Q3: 有些真题页面找不到PDF
GESP官网的部分旧真题可能只提供在线浏览而非PDF下载,工具会正常提示“未找到PDF文件链接”。
Q4: 如何更新已下载的真题列表?
直接重新运行脚本即可。工具会重新抓取官网并更新本地缓存文件gesp_data.json。
Q5: 文件名乱码怎么办?
代码中已经对文件名做了清理和编码处理(sanitize_filename函数)。如果仍然出现乱码,检查终端的字符编码设置,或改用支持UTF-8的终端(如Windows Terminal、iTerm2)。
最后
最近折腾了一个oj插件,题库严重缺题,用这个来应应急还是不错的。
暂无评论