Python采集大学教务系统成绩单实战示例
作者:极客飞虎 发布时间:2021-05-13 23:14:43
前言
采集教务系统成绩单是一个非常有意义的项目。在现代教育中,教务系统已经成为了学校管理和教学工作的重要组成部分。然而,由于各种原因,教务系统的成绩单并不能下载的,这给我们带来了很多不必要的麻烦和困扰。因此,采集教务系统成绩单的项目具有非常重要的意义。
在本文中,我们将详细介绍采集教务系统成绩单的背景和目的,并阐述该项目实战所涉及的相关知识点和技术细节。
采集数据
我们上一篇介绍了,如何采集大家熟悉的百度贴吧的排行榜。今天,我们来学习采集教务系统里面的成绩单,把自己的成绩采集下来。
发送请求
我们首先确定我们的目标网址,对我们需要获取的数据。
我们要把每一行的数据获取下来,我们接下来用到开发者工具。我们看成绩是在什么位置。是不是在网页源代码中。接下来,我们发送请求,获取网页源代码。
每个学校教务系统不一样,但是,原理都是一样的,我们通过抓包分析,看到,我们学校把成绩放到了一个数据包里面,一个学期一个数据包。
那么,接下来就简单了,我们只需要请求数据,当然,我们肯定要加上cookies,毕竟里面包含了我们的登录信息。
我们看看前面代码是怎么写的。
semesters = ["44", "45", "46", "66", "126", ]
for Semester in semesters:
url = f'http://jwxt.aqnu.edu.cn/student/for-std/grade/sheet/info/73127?semester={Semester}'
headers = {
'Cookie': 'cookies',
}
res = requests.get(url, headers=headers)
print(url, res)
我们这里直接多页遍历,我们学校只做了cookies检查,对请求头没有要求。
这段代码首先定义了一个包含多个元素的列表 semesters
,其中每个元素表示一个学期的信息。然后,使用 for
循环遍历列表中的每个元素,并使用 requests.get()
函数向指定的 URL 发送 GET 请求。在请求中,我们设置了一些请求头信息,以确保我们能够正确地解析 URL 并获取正确的响应。最后,我们打印了 URL、响应和响应中的内容。
获取数据
id2semesters = res.json()['id2semesters']
semester = id2semesters[f'{Semester}']['nameZh']
semesterId2studentGrades = res.json()['semesterId2studentGrades'][f'{Semester}']
for semesterId2studentGrade in semesterId2studentGrades:
course = semesterId2studentGrade['course'] # 课程
course_nameZh = course['nameZh'] # 课程名称
credits = course['credits'] # 课程学分
try:
courseProperty = semesterId2studentGrade['courseProperty']
courseProperty_name = courseProperty['name']
except TypeError:
courseProperty_name = "NOLL"
gp = semesterId2studentGrade['gp'] # 绩点
gaGrade = semesterId2studentGrade['gaGrade'] # 成绩
gradeDetails = semesterId2studentGrade['gradeDetail'] # 明细原文
gradeDetail = re.findall('data-typeid=.*?>(.*?)</span>', gradeDetails)
这段代码首先从 JSON 响应中获取了学期和学生的绩点信息,并将其存储在变量 semester
和 semesterId2studentGrades
中。然后,使用 for
循环遍历 semesterId2studentGrades
中的每个元素,并使用 course
属性获取该学期的课程信息。接着,使用 course_nameZh
属性获取课程名称,使用 credits
属性获取课程学分,使用 courseProperty_name
属性获取课程属性名称,如果不存在则返回 "NOLL"。最后,使用 gp
属性获取绩点,使用 gaGrade
属性获取成绩,使用 gradeDetail
属性获取明细原文,使用 gradeDetail
属性获取明细原文中的数据类型标识符。
这里就是json取值,没有什么难度,只要写好这些,就可以获取到我们想的内容,我们看看效果。
保存数据
保存数据就简单了,我们已经练习了很多次。
f = open('个人成绩单.csv', mode='a', encoding='utf-8_sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['学期','课程名称', '课程学分', '课程类型', '成绩', '学分绩点',
'成绩明细'])
这段代码首先打开一个名为 personal_scores.csv
的文件,并指定使用 a
模式打开文件。然后,使用 csv.DictWriter()
函数创建一个 CSV 写入器,并指定要写入的列名。在这个例子中,我们指定了 fieldnames
参数,它包含了我们要写入的列名。
接下来,我们使用 csv_writer.writeheader()
方法写入列名。这个方法会将列名写入文件的第一行。
最后,我们使用 csv_writer.writerow()
方法写入数据。在这个例子中,我们写入了一个包含学期、课程名称、课程学分、课程类型、成绩、学分绩点和成绩明细的列表。
接下来就是写入字典,保存下来。
dit = {
'学期': semester,
'课程名称': course_nameZh,
'课程学分': credits,
'课程类型': courseProperty_name,
'成绩': gaGrade,
'学分绩点': gp,
'成绩明细': gradeDetail,
}
csv_writer.writerow(dit)
这段代码使用 csv_writer.writerow()
方法将 dit
字典写入 CSV 文件中。fieldnames
参数指定了要写入的列名。在这个例子中,我们指定了 ['学期','课程名称', '课程学分', '课程类型', '成绩', '学分绩点', '成绩明细']。
来源:https://juejin.cn/post/7222940120328405049
猜你喜欢
- 一、模块模块可以看成是一堆函数的集合体。一个py文件内部就可以放一堆函数,因此一个py文件就可以看成一个模块。如果这个py文件的文件名为mo
- 在对二维数据进行 resize / mapping / 坐标转换等操作时,经常会将原本的整数坐标变换为小数坐标,对于非整数的坐标值一种直观有
- php输出全部gb2312编码内的汉字,$area表示分区,$pos表示分区内所在位置。<?php$fp = fopen('t
- 一:命名空间里的namespace关键字和__NAMESPACE__常量的运用PHP支持两种抽象的访问当前命名空间内部元素的方法,__NAM
- 首先预览一下 PyCharm 在实际应用中的界面:(更改了PyCharm的默认风格)安装首先去下载最新的pycharm 2.7.3,进行安装
- 方法一 通过GridView(简评:方法比较简单,但是只适合生成格式简单的Excel,且无法保留VBA代码),页面无刷新aspx.cs部分u
- 在默认情况下,MySQL搜索不区分大小写(但某些字符集始终区分大小写,如czech)。这意味着,如果你使用col_name LIKE
- 这段时间常给来面试的同学用《 你是一个职业的页面重构工作者吗? 》中三个部分的不同阶段去做自测,发现很多人都自我感觉良好,给我的回答基本都是
- 两年前发表的《The visual design of Web 2.0》中提到“Rounded everything”,圆角因使人感觉舒适的
- 1983年1月19日,苹果公司发布乔布斯领导研制的新一代电脑Lisa,当时Lisa电脑的设计人员就认为,必须将立即执行的命令和需要用户附加输
- 如何在Access数据库中立即得到所插入记录的自动编号?首先,我们要保证获得记录集的方式支持bookmark属性,如在1、3插入一条有自动编
- 一个表单焦点效果javascript函数,可以用在美化表单界面,挺好看的。function validForms(){  
- 今天工作中遇到,拿出来说说。网上CSS下拉菜单不少,不过都存在这样那样的问题,主要问题是,如果你菜单下面有一个FLASH的话,很多都会被FL
- 网上asp加密字符的MD5很多,也很普遍,因为受到asp语言本身的限制,对文件进行md5介绍的文章很少,本文通过2种方式来谈谈如何通过asp
- 图片的间隙Q:我有一张大图片,把它切割后在Dreamweaver中进行拼接,可是总是有间隙,不知为什么?A:不知你是否把表格的边距、间距和边
- 本文实例分析了Python自定义进程池。分享给大家供大家参考,具体如下:代码说明一切:#encoding=utf-8#author: wal
- 做网站数据库,是选SQL Server还是Access好,可能您会说:选MySQL好,不过现在只是讨论IIS+ASP这种架构下的选择,不讨论
- 运行环境: python 3.6.0今天处于练习的目的,就用 python 写了一个百度翻译,是如何做到的呢,其实呢就是拿到接口,通过这个接
- 使用JavaScript写的一个旋转的彩圈效果图<!DOCTYPE html><html><head>&
- 当然,如果你的网站文章中有图片,那么请记得一定要打上自己的LOGO,而且这个LOGO不要固定在这些图片的某个角落里,一定要随机出现在图片的任