news 2026/4/21 16:00:23

Python老师福音:用xlwings+requests自动抓取iCode学生刷题数据,解放双手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python老师福音:用xlwings+requests自动抓取iCode学生刷题数据,解放双手

Python教学自动化:用xlwings+requests打造智能刷题监控系统

每周五下午三点,李老师都会准时打开电脑,开始他耗时两小时的"数据搬运"工作——手动登录三十多名学生的编程训练平台账号,逐个记录他们在四个训练场的刷题进度。这种重复劳动直到他发现了Python自动化工具组合才彻底改变。现在,让我们看看如何用xlwings和requests构建一个会"自己工作"的教学助手系统。

1. 教学自动化需求分析与方案设计

编程教师最头疼的莫过于追踪学生的课后练习情况。传统手工记录存在三个致命缺陷:时间成本高(每位学生需要3-5分钟操作)、人为误差多(容易记错行列位置)、数据滞后严重(通常每周才能汇总一次)。而自动化方案可以做到:

  • 实时性:随时执行脚本获取最新进度
  • 准确性:系统自动填充数据,零误差
  • 可视化:自动生成带格式的进度报表
  • 可追溯:按日期存档历史记录

技术选型上,我们采用黄金组合:

# 核心工具库 import xlwings as xw # Excel交互 import requests # 网络请求 import execjs # JS加密处理

典型工作流分为四个阶段:

  1. 数据准备:从Excel读取学生账号信息
  2. 模拟登录:处理平台加密逻辑获取访问权限
  3. 数据抓取:获取各训练场星级进度
  4. 报表生成:自动写入格式化Excel报表

提示:建议在非教学时段运行脚本,避免对平台服务器造成压力

2. 核心组件实现详解

2.1 Excel智能交互模块

xlwings不同于openpyxl等库的最大优势在于其与Excel应用程序的深度集成,可以实现所见即所得的操作效果。初始化时应配置:

app = xw.App(visible=True, add_book=False) # 显示Excel界面 app.display_alerts = False # 关闭提示弹窗 app.screen_updating = True # 实时更新显示

智能检测工作表是否存在的实用技巧:

def check_sheet_exists(workbook, sheet_name): try: sheet = workbook.sheets[sheet_name] return True except: return False

表格自动化美化的关键参数:

边框类型常量值效果描述
左边框7单元格左侧竖线
上边框8单元格顶部横线
下边框9单元格底部横线
右边框10单元格右侧竖线

2.2 网络请求与加密处理

训练平台通常采用前端加密保护登录安全。处理步骤:

  1. 使用浏览器开发者工具定位加密JS文件
  2. 提取关键加密函数(本例为MD5加密)
  3. 通过execjs执行JS代码

典型加密处理流程:

# 加载JS加密文件 with open('./encrypt.js', 'r', encoding='utf-8') as f: js_code = f.read() # 执行加密函数 def encrypt_password(password): ctx = execjs.compile(js_code) return ctx.call('md5Encrypt', password)

注意:遇到编码错误时可尝试去除JS文件中的注释和换行符

2.3 进度数据采集逻辑

训练场数据通常通过AJAX接口返回JSON格式。请求示例:

def get_training_progress(session, level): url = "https://api.training-platform.com/game-progress" data = {"level": level} # 0/10/20/30对应四个训练场 headers = { "User-Agent": "Mozilla/5.0", "Referer": "https://training-platform.com/dashboard" } response = session.post(url, data=data, headers=headers) return response.json()["data"]

数据处理时要注意类型转换:

# 原始数据示例:{"star": 15, "totalStar": 20} progress = f"{data['star']}/{data['totalStar']}" # 转换为"15/20"格式

3. 完整系统实现与优化

3.1 主程序架构设计

核心执行流程如下图所示(伪代码表示):

初始化Excel应用 → 读取学生名单 → 创建进度报表 ↓ for 每个学生: 加密密码 → 模拟登录 → 获取四个训练场数据 ↓ 写入Excel并美化格式 ↓ 保存文件 → 退出应用

关键实现代码段:

def main(): # 初始化 app, workbook = init_excel() students = read_student_list(workbook) report_sheet = prepare_report(workbook) # 数据处理 session = requests.Session() for idx, student in enumerate(students): login(session, student) for level in [0, 10, 20, 30]: progress = get_progress(session, level) write_progress(report_sheet, idx, level, progress) # 收尾 finalize_report(workbook) app.quit()

3.2 异常处理与日志记录

健壮的生产级脚本必须包含完善的错误处理:

try: response = session.post(url, data=data, timeout=10) response.raise_for_status() except requests.exceptions.RequestException as e: log_error(f"请求失败: {str(e)}") continue

推荐日志格式:

[2023-08-20 14:30:45] INFO: 开始处理学生张三(账号:zhangsan) [2023-08-20 14:31:02] SUCCESS: 1级训练场进度 12/15 [2023-08-20 14:31:15] WARNING: 3级训练场数据缺失

3.3 性能优化技巧

  • 并行处理:使用concurrent.futures加速多学生处理
from concurrent.futures import ThreadPoolExecutor with ThreadPoolExecutor(max_workers=4) as executor: executor.map(process_student, students)
  • 缓存机制:避免重复登录
if not session.cookies.get('auth_token'): login(session, credentials)
  • 速率限制:添加适当延迟
import time time.sleep(1) # 每个请求间隔1秒

4. 教学场景深度应用

4.1 数据可视化扩展

原始数据可以通过xlwings直接生成图表:

chart = report_sheet.charts.add() chart.set_source_data(report_sheet.range('B2:E10')) chart.chart_type = 'column_clustered'

更高级的分析建议:

  1. 计算每日进步幅度(今日星数 - 昨日星数)
  2. 生成学生排名变化曲线
  3. 识别长期停滞不前的学生

4.2 教学管理集成方案

将系统嵌入日常工作的三种方式:

  1. 定时任务:使用Windows任务计划或cron定时执行
  2. 即时触发:创建Excel按钮宏关联Python脚本
  3. 邮件通知:添加SMTP模块自动发送进度报告
# 邮件发送示例 import smtplib from email.mime.text import MIMEText def send_report(email, content): msg = MIMEText(content) msg['Subject'] = '编程训练进度周报' smtp = smtplib.SMTP('smtp.example.com') smtp.sendmail('auto-report@school.com', email, msg.as_string())

4.3 系统扩展方向

  • 多平台支持:适配其他编程训练网站
  • 移动端查看:生成HTML报告或小程序展示
  • 智能预警:对进度异常学生自动提醒
  • API服务化:搭建Flask提供Web查询界面
# Flask API示例 from flask import Flask, jsonify app = Flask(__name__) @app.route('/progress/<student_id>') def get_progress(student_id): data = query_progress(student_id) return jsonify(data)

教学自动化不是要取代教师的判断,而是将老师从重复劳动中解放出来,把宝贵的时间留给更有价值的教学设计与学生互动。当技术工具与教育智慧相结合,就能创造出1+1>2的教学效果。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 16:00:01

Elasticsearch 核心数据模型:10大核心概念

Elasticsearch 核心数据模型&#xff1a;10大核心概念一、前言二、Elasticsearch 数据模型 10 大核心概念第一部分&#xff1a;逻辑数据模型&#xff08;最基础&#xff0c;对应数据库&#xff09;1. Index&#xff08;索引&#xff09;2. Document&#xff08;文档&#xff09…

作者头像 李华
网站建设 2026/4/21 15:59:26

从TLS到比特币:聊聊SHA-256这个‘万金油’哈希算法,到底牛在哪?

从TLS到比特币&#xff1a;聊聊SHA-256这个‘万金油’哈希算法&#xff0c;到底牛在哪&#xff1f; 第一次在浏览器地址栏看到那个绿色小锁图标时&#xff0c;你可能不会想到&#xff0c;背后默默守护数据安全的是一群数学家和一套精妙的算法体系。而SHA-256就像这个体系中的瑞…

作者头像 李华
网站建设 2026/4/21 15:57:16

LumenPnP终极指南:如何用开源贴片机打造你的电子制造车间

LumenPnP终极指南&#xff1a;如何用开源贴片机打造你的电子制造车间 【免费下载链接】lumenpnp The LumenPnP is an open source pick and place machine. 项目地址: https://gitcode.com/gh_mirrors/lu/lumenpnp 还在为小批量电子生产而烦恼吗&#xff1f;传统贴片机价…

作者头像 李华
网站建设 2026/4/21 15:55:18

复古计算机复刻:用Arduino模拟NRI Model 832

1. 项目概述1972年问世的NRI Model 832数字计算机&#xff0c;最初是作为电子技术培训工具而设计的。这个复古硬件项目完美融合了数字电路教学与计算机操作实践的双重功能。当我第一次看到这个老式训练机的资料时&#xff0c;就被它简洁而富有教育意义的设计所吸引——用74系列…

作者头像 李华