使用Python批量获取学生期末考试成绩

以下是我们学校对于期末考试成绩临时查询的一个网站

 

 我突发奇想,可不可以通过爬虫的方式批量获取成绩信息

于是说干就干

首先观察网页的请求

 

 

 

 

通过查看,我们可以很明显看到网站查询是通过对https://wxzx.cqyti.com/wxProject/ScoreQuery.do进行post请求而来的,令人惊讶的是网页上要填写的姓名和辅导员根本没有post上去

这大大降低了我们爬取数据的难度!!!

我们可以看到,只post了三个数据 分别是

 

所以我们只需要通过循环生成xh所对应的学号 在带上固定的“year”和“term”即可

首先载入所需要的库

import requests import re

定义请求的url和伪装请求头

#定义请求的url url = 'https://wxzx.cqyti.com/wxProject/ScoreQuery.do' #定义请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0' }

接下来就是获取数据了

首先我们需要打开一个文本文件用于写入最终的结果

我们定义一个sum来提示我们已经录入了多少

#post的数据 file = open("E:/成绩.txt", "w") sum = 0 #用于提示总共记录了多少学生 for i in range(2019211600,2019211711): head = '学号为%d的同学的成绩\n'%(i) #准备好同学的学号用于写入 print (head) #用于提醒正在记录的同学的学号 data = {'xh' : str(i) , 'year' :'2019-2020' , 'term':'1' } #定义data 将生成的学号放入 # 发起post请求 res = requests.post(url=url ,headers=headers,data =data) data_get = res.json()

接下来我们来分析一下所保存的data文件

 

 

我们可以很清楚的看到我们所需要的信息就在data_get中的"xskscj”内的 "scorename"与"value"中因此我们可以直接从data_get中切片选取

#写入文本 k = 0 #初始化k的值,用于接下来遍历字典 file.write(head) #将学号写入文本 for ii in data_get['xskscj']: #通过循环遍历字典将成绩和学号写入文本 kecheng = data_get['xskscj'][k]['scorename'] fenshu = data_get['xskscj'][k]['value'] k=k+1 jieguo = kecheng + ':' + str(fenshu)+'' print(jieguo) file.write(jieguo) file.write('\n') print('录入成功') sum= sum + 1 # 用于计算录入的同学总数 print('共计录'+ str(sum) + '名同学')

最后记得关闭文本文件

file.close() #关闭文本文件

最后经过简单的调试就ok啦

 

 


__EOF__

本文作者Mr丶Kr's blog
本文链接https://www.cnblogs.com/mrkr/p/12131325.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Mr、Kr  阅读(3869)  评论(3编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示