前言

在现代教育中,教务系统已经成为了学校管理和教学工作的重要组成部分。然而,由于各种原因,教务系统的成绩单并不能下载的,这给我们带来了很多不必要的麻烦和困扰。因此,采集教务系统成绩单的项目具有非常重要的意义。

目录

前言

环境使用

模块使用

模块介绍

代码实现

发送请求

获取数据

保存数据

总结


环境使用

  • python 3.9
  • pycharm

模块使用

  • requests

模块介绍

  • requests

requests是一个很实用的Python HTTP客户端库,爬虫和测试服务器响应数据时经常会用到,requests是Python语言的第三方的库,专门用于发送HTTP请求,使用起来比urllib简洁很多。

  • parsel

parsel是一个python的第三方库,相当于css选择器+xpath+re。

parsel由scrapy团队开发,是将scrapy中的parsel独立抽取出来的,可以轻松解析html,xml内容,获取需要的数据。

相比于BeautifulSoup,xpath,parsel效率更高,使用更简单。

  • re

re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。

  • os

os 就是 “operating system” 的缩写,顾名思义,​​​​​​​os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用 os 模块,一方面可以方便地与操作系统进行交互,另一方面也可以极大增强代码的可移植性。

  • csv

它是一种文件格式,一般也被叫做逗号分隔值文件,可以使用 Excel 软件或者文本文档打开 。其中数据字段用半角逗号间隔(也可以使用其它字符),使用 Excel 打开时,逗号会被转换为分隔符。csv 文件是以纯文本形式存储了表格数据,并且在兼容各个操作系统。

模块安装问题:

  • 如果安装python第三方模块:

win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

在pycharm中点击Terminal(终端) 输入安装命令

  • 安装失败原因:
  • 失败一: pip 不是内部命令

解决方法: 设置环境变量

  • 失败二: 出现大量报红 (read time out)

解决方法: 因为是网络链接超时, 需要切换镜像源

    清华:https://pypi.tuna.tsinghua.edu.cn/simple阿里云:https://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/华中理工大学:https://pypi.hustunique.com/山东理工大学:https://pypi.sdutlinux.org/豆瓣:https://pypi.douban.com/simple/例如:pip3 install -i https://pypi.doubanio.com/simple/ 模块名
  • 失败三: cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入

解决方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可) 卸载一个就好,或者你pycharm里面python解释器没有设置好。

代码实现

我们上一篇介绍了,如何用Python采集情感音频。今天,我们来学习采集教务系统里面的成绩单,把自己的成绩采集下来。大家也可以尝试采集自己学校的教务系统。

发送请求

我们首先确定我们的目标网址,对我们需要获取的数据。

 

我们要把每一行的数据获取下来,我们接下来用到开发者工具。我们看成绩是在什么位置。是不是在网页源代码中。接下来,我们发送请求,获取网页源代码。

每个学校教务系统不一样,但是,原理都是一样的,我们通过抓包分析,看到,我们学校把成绩放到了一个数据包里面,一个学期一个数据包。

 http://jwxt.aqnu.edu.cn/student/for-std/grade/sheet/info/73127?semester={Semester}'

那么,接下来就简单了,我们只需要请求数据,当然,我们肯定要加上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检查,对请求头没有要求。因为cookies涉及到了登录信息,我这里就没有展示了,大家在采集自己学校教务系统的时候,就可以用自己的cookies。

获取数据

id2semesters = res.json()['id2semesters']
semester = id2semesters[f'{Semester}']['nameZh']
semesterId2studentGrades = res.json()['semesterId2studentGrades'][f'{Semester}']

这段代码首先从 JSON 响应中获取了学期和学生的绩点信息,并将其存储在变量 semester 和 semesterId2studentGrades 中。

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)

然后,使用 for 循环遍历 semesterId2studentGrades 中的每个元素,并使用 course 属性获取该学期的课程信息。

这里就是json取值,没有什么难度,只要写好这些,就可以获取到我们想的内容,我们看看效果。

保存数据

保存数据就简单了,我们已经练习了很多次。


f = open('个人成绩单.csv', mode='a', encoding='utf-8_sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['学期','课程名称', '课程学分', '课程类型', '成绩', '学分绩点','成绩明细'])

我们使用 csv_writer.writerow() 方法写入数据。在这个例子中,我们写入了一个包含学期、课程名称、课程学分、课程类型、成绩、学分绩点和成绩明细的列表。

接下来就是写入字典,保存下来。

dit = {'学期': semester,'课程名称': course_nameZh,'课程学分': credits,'课程类型': courseProperty_name,'成绩': gaGrade,'学分绩点': gp,'成绩明细': gradeDetail,
}csv_writer.writerow(dit)

这段代码使用 csv_writer.writerow() 方法将 dit 字典写入 CSV 文件中。fieldnames 参数指定了要写入的列名。在这个例子中,我们指定了 ['学期','课程名称', '课程学分', '课程类型', '成绩', '学分绩点', '成绩明细']

总结

总之,采集教务系统成绩单是一个非常有意义的项目实战,它不仅可以采集成绩单,还可以提升我们采集数据的能力。在实现过程中,我们需要注意数据的准确性和完整性,并采取必要的措施来保证项目的安全性和可靠性。

【Python实战】Python采集大学教务系统成绩单相关推荐

  1. 用 Python 实现模拟登录正方教务系统抢课

    (点击上方蓝字,快速关注我们) 作者:小苏打 https://vhyz.me/2018/06/12/用Python实现模拟登录正方教务系统抢课/ 最近学校开始选课,但是如果选课时间与自己的事情冲突,这 ...

  2. python二级成绩查询入口官网_python爬虫实战之模拟正方教务系统登录查询成绩

    最近由于某些需要,开始入门Python网络爬虫,想通过一个Python程序来访问正方教务管理系统并且抓取到期末的成绩,由于我并没有深入了解过过其他的编程语言,所以,也比较不出Python和其他语言(如 ...

  3. python爬虫实战之模拟正方教务系统登录查询成绩

    最近由于某些需要,开始入门Python网络爬虫,想通过一个Python程序来访问正方教务管理系统并且抓取到期末的成绩,由于我并没有深入了解过过其他的编程语言,所以,也比较不出Python和其他语言(如 ...

  4. 用Python实现模拟登录正方教务系统抢课

    最近学校开始选课,但是如果选课时间与自己的事情冲突,这时候就可以使用Python脚本自助抢课,抢课的第一步即是模拟登录,需要模拟登录后保存登录信息然后再进行操作. 而且整个流程是比较简单,这是因为正方 ...

  5. Python selenium自动获取URP教务系统课表并以图片形式保存

    之前写过一篇也是爬URP的(Python爬取URP教务系统课程表并保存到excel),不过用的是request+post请求,中间就借用了一下selenium获取验证码链接,所以这次我就写了一个单单用 ...

  6. python模拟登录教务系统_用Python实现模拟登录正方教务系统抢课

    最近学校开始选课,但是如果选课时间与自己的事情冲突,这时候就可以使用Python脚本自助抢课,抢课的第一步即是模拟登录,需要模拟登录后保存登录信息然后再进行操作. 而且整个流程是比较简单,这是因为正方 ...

  7. asp 退出登录修改cookie能进入后台_用Python实现模拟登录正方教务系统抢课

    6月23日更新:由于国内高校正方教务系统或多或少都会有所不同,所以细节地方还是需要自己修改的,我这个过程也只是一个案例,但这其中的本质上是不变的,即是抓包分析. 如果有什么不懂的,可以在评论区评论,或 ...

  8. python实现强智科技教务系统抢课(两种方法)

    前言 又到了选课的时间,又一次被教务系统的预选给安排了,硬是一门都没选中.于是想实现有没有自动捡课的方法.就整体分为两种方法,一种是获取get请求然后由python多线程提交去选课,一种是利用自动化测 ...

  9. python课表查询系统_使用python抓取广西科技大学教务系统课程表

    因学校教务系统课程表查询功能累赘,服务器经常挂,同时也不适合手机端查询,所以用python开发爬虫抓取所有课程表,放到我的服务器上面. 本文仅供学习. 特性 中途退出程序再次运行不会抓取到重复课程表 ...

最新文章

  1. linux-进程的替换exec函数族
  2. Ext.form.TextArea文本区
  3. 单向链表操作之删除倒数第n个结点
  4. hadoop 配置文件简析
  5. jsp 中提交表单后在firefox、chrome 中中文显示为正常,但在IE中中文显示为乱码?...
  6. 软件测试第一次作业--石家名 3013218062
  7. Cocos2d-x学习笔记(9)(CCTextFieldTTF使用输入框)
  8. 挺住!锤子新机研发停滞、全部机型官网无货 电商平台降价促销...
  9. 做互联网项目一定要做可循环,可积累的事情
  10. 用Python编写干净 可测试 高质量的代码
  11. Vmware虚拟机宕机问题处理
  12. 转:Ajax与CustomErrors的尴尬
  13. 第十四届全国大学生智能汽车竞赛获奖名单
  14. 科普:史上最强单片机
  15. 数据结构导论【五】之 图
  16. excel打印预览分页_Excel分页符预览技巧
  17. java实现两张图片合并起来。
  18. ps cs6安装教程
  19. 台式计算机usb接口无反应6,教你电脑usb接口不能用的解决方法
  20. 从ccps项目中学习bottle,sqlalchemy,jinja2

热门文章

  1. spidermonkey编译
  2. 英语口语8000句 pdf_吹爆欧路词典,竟然可以免费阅读原版书和PDF(内附有声书资源)...
  3. 微软放弃收购雅虎 | 历史上的今天
  4. cookie注入分析和动画教程
  5. 【科技杂谈】记录学习装重装系统的过程(非常规重装系统教学)
  6. 64、滑动窗口的最大值
  7. 湖南芒果代理php,芒果商城系统GSHOP php网店系统 UTF8
  8. python维语翻译中文_维文、藏文等特殊语种翻译
  9. Java将对象信息写到word模板中(全网最简单版)
  10. 最新版ser2net移植到ARM板上,交叉编译