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

news2024/11/7 9:35:07

前言

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

目录

前言

环境使用

模块使用

模块介绍

代码实现

发送请求

获取数据

保存数据

总结


环境使用

  • 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 参数指定了要写入的列名。在这个例子中,我们指定了 ['学期','课程名称', '课程学分', '课程类型', '成绩', '学分绩点', '成绩明细']

总结

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

6adf31c8c5dd4e6a83314f4805b30bc1.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/624842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【轻量化网络系列(6)】EfficientNetV1论文超详细解读(翻译 +学习笔记+代码实现)

前言 EfficientNetV1是Google在2019年发布的文章&#xff0c;这篇论文最主要的创新点是Model Scaling。论文提出了compound scaling&#xff0c;混合缩放&#xff0c;把网络缩放的三种方式&#xff1a;深度、宽度、分辨率&#xff0c;组合起来按照一定规则缩放&#xff0c;从…

使用FPGA驱动GS2972(3G-SDI模式)外同步(HSYNC VSYNC DE)或内(BT1120)同步输出彩条调试

GS2972视频输出调试 一、外同步模式1.1 GS2972的硬件初始化1.2 GS2972的驱动时序1.3 GS2972的驱动RTL代码1.4 GS2972输出彩条1.5 GS2972驱动易出bug二、数据内嵌同步模式2.1 GS2972的硬件初始化2.2 GS2972的驱动时序2.3 GS2972的驱动RTL代码2.4 GS2972输出彩条2.5 GS2972驱动易…

IIC总线简介及IIC的通信过程与时序

1.IIC总线简介 IIC总线&#xff1a; IIC总线是Philips公司在八十年代初推出的一种串行、半双工总线&#xff0c;主要用于近距离、低速的芯片之间的通信&#xff1b;IIC总线有两根双向的信号线&#xff0c;一根数据线SDA用于收发数据&#xff0c;一根时钟线SCL用于通信双方时钟…

跳槽一次涨8k,5年跳了3次...

最近有人说&#xff0c;现在软件测试岗位初始工资太低了&#xff0c;有些刚刚入行的测试朋友说自己工资连5位数都没有…干了好几年也没怎么涨。 看看别人动辄月薪1-2万&#xff0c;其实我想说也没那么难。 说下如何高效地拿到3万的工资&#xff0c;总体来说&#xff0c;就靠跳…

墨天轮关系型分布式数据库榜单解读

分布式关系型数据库概述 作为数据库演进方向之一&#xff0c;分布式能力受到更多用户的关注。从技术架构演进来看&#xff0c;数据库正走过了从单机式、集中式到分布式的发展过程&#xff0c;目前是多种架构并存的阶段。分布式架构以其更好的存储与计算扩展能力&#xff0c;受…

四六位、不定长、计算题等验证码,一款工具全部搞定,简单方便还开箱即用,精度高达96%!!

四六位、不定长、计算题等验证码,第三方平台准确率低,自己不会神经网络训练,嫌麻烦,一款工具全部搞定,开箱即用!! 本文秉承着开箱即用的原则,真正做到一款工具识别秒杀所有单行文本验证码,这里的单行指的就是某张4位6位或者计算题或者文字的验证码,我是使用了4位+6位…

Vue2数据代理的理解

理解 最近在复习Vue2&#xff0c;对于数据代理有些模糊。查阅了一些资料。 这是官方解释https://v2.cn.vuejs.org/v2/api/#data数据代理&#xff1a;通过代理对象 操作&#xff08;读/写&#xff09;目标对象中的属性 这里出现了两个对象&#xff0c;一个叫代理对象&#xf…

VMware虚拟机安装Windows Server 2003

哈喽&#xff0c;各位小伙伴大家好&#xff0c;win server2003算是拖了比较久了&#xff0c;一直没发布&#xff0c;今天完成server2003的安装后server系列的安装教程就告一段落了。马上暑假了&#xff0c;想必新生开学之后&#xff0c;很多计算机网络专业的同学们要开始接触到…

全志V3S嵌入式驱动开发(sd卡驱动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 之前开发过程中&#xff0c;整个linux的启动都是基于sd卡进行的。此外&#xff0c;我们有这么几点发现&#xff0c;首先&#xff0c;v3s本身是识别…

Python3+Selenium2完整的自动化测试实现之旅(五):自动化测试框架、Python面向对象以及POM设计模型简介

目录 前言 1 自动化测试框架概述 2 自动化测试框架需要的环境 3 自动化测试框架设计思想&#xff1a;Python面向对象 4 自动化测试框架设计思想&#xff1a;POM&#xff08;Page Object Model&#xff09;页面对象模型 【自动化测试工程师学习路线】 结语 前言 之前…

【AI数学】相机成像之外参数

在一个多视点计算机视觉系统里&#xff0c;系统输入除了多个视角的图像外&#xff0c;一般还需要输入对应视角下相机的内外参数。其中&#xff0c;相机内参数决定了图像坐标系和相机三维坐标系的映射关系&#xff0c;而相机外参数则决定了相机三维坐标系和世界坐标系的对应关系…

【TCP/IP】多进程服务器的实现(进阶) - 进程的概念及fork函数

目录 进程的概念及应用 进程的定义 进程的ID fork函数&#xff08;进程创建函数&#xff09; 多进程&#xff08;以及多线程&#xff09;是现代计算机网络的精髓。在之前&#xff0c;我们所做的诸如回声服务器、回声客户端、文件收发等都是偏向基础的单进程应用。而经过前面…

【论文阅读】Twin neural network regression is a semi- supervised regression algorithm

论文下载 GitHub bib: ARTICLE{,title {Twin neural network regression is a semi- supervised regression algorithm},author {Sebastian J Wetzel and Roger G Melko and Isaac Tamblyn},journal {Machine Learning: Science and Technology},year {2022},volum…

“我转行做测试开发的这一年多,月薪5K变成了18K”,中文系萌妹的自白

公司老板是我的测试引路人 本人就读于某普通院校&#xff0c;在大学期间就开始实习找工作&#xff0c;误打误撞进入一家做工业大数据的创业公司。 刚开始我并没有明确的职业发展方向&#xff0c;主要是做一些环境搭建的基础工作。但由于执行效率高&#xff0c;工作责任感强&a…

06-发送短信验证码实现登录功能

1、发送短信验证码实现登录功能的流程 1.1、获取验证码流程 1.2、登录流程 1.3、页面带有图形验证码的流程 2、 注册登录二合一页面的开发 2.1、将src目录下的App.vue页面上通用显示的删掉 2.2、在router目录下的index.js文件中通过懒加载的方式添加login.vue页面 对于rout…

【新版】系统架构设计师 - 软件工程

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 软件工程考点摘要软件工程概述软件能力成熟度模型软件过程模型瀑布模型原型化模型增量模型螺旋模型喷泉模型V模型迭代与增量的概念CBSD基于构件的模型&#xff08;构件组装模型/基于构件的软件开发…

PSP - 更新 MSA 搜索的全部 UniProt 蛋白序列库

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131115471 UniProt 是一个提供蛋白质序列和功能信息的数据库,由欧洲生物信息学研究所(EMBL-EBI)、美国瑞士生物技术信息中心(SIB)和美国蛋白质信息资源(…

一图详解!接口测试之HTTP协议与HTTPS协议的传输过程

目录 前言&#xff1a; 1、HTTP协议 1.1 协议 1.2 原理 1.2.1 客户端 1.2.2 服务器端 1.3 请求报文 1.3.1 报文格式 1.3.2 请求报文方法 1.4 响应报文 1.4.1 报文格式 1.4.2 响应报文状态码 2、HTTPS协议 2.1 加密算法 2.2 数字签名 2.3 传输过程 2.4 流程图 …

Kafka运维监控:Kafka-Eagle安装

kafka自身并没有集成监控管理系统&#xff0c;因此对kafka的监控管理比较不便&#xff0c;好在有大量的第三方监控管理系统来使用&#xff0c;常见的有&#xff1a; Kafka Eagle KafkaOffsetMonitor Kafka Manager&#xff08;雅虎开源的Kafka集群管理器&#xff09; Kafka …

安装和配置Canal

安装和配置Canal 下面我们就开启mysql的主从同步机制&#xff0c;让Canal来模拟salve 1.开启MySQL主从 Canal是基于MySQL的主从同步功能&#xff0c;因此必须先开启MySQL的主从功能才可以。 这里以之前用Docker运行的mysql为例&#xff1a; 1.1.开启binlog 打开mysql容器…