文章目录

  • 1 总体介绍
  • 2 获取token的思路
  • 3 通过token访问成绩页面
  • 4 解析成绩页面返回的json
  • 5 导出数据到Excel

1 总体介绍

近日学校上线了家长督学系统。通过该系统,输入学生的证件号,即可查询学生的成绩。密码为证件号的后六位,刚好我有同学们的证件号。准备通过Python读取Excel中保存的证件号,然后模拟登陆,获得成绩信息,然后将所有同学的成绩输出到Excel,以便进行下一步的分析。

2 获取token的思路

通过抓包工具,可以看出在点击登录后,出现了“login”开头的一个请求,并在response中发现了“登陆成功”的字样。

在这个json数据的后面,还找到了一个“token”,我猜测这个token就是用户的标识,标志着登陆成功,可能在后面涉及到用户信息查询的时候会用到这个token。

然后查看请求的信息,使用post方式请求,url就是一个固定的前缀拼接上用户的账号和密码,而我刚好有这些信息。

然后进入查询成绩的页面进行查询,发现果然,token出现在了请求的头文件里,于是爬虫的思路就有了。第一步就是通过登录,获得到用户的token。

那就开始写代码啦,首先通过excel函数,将所需的账户名和密码从excel文件中提取出来。
密码为ID的后几位,截取字符串获得密码的操作在main函数中完成了,此处不予展示。

def excel(i):global userglobal pwdworkBook = xlrd.open_workbook('data/all.xls')sheet1_content1 = workBook.sheet_by_index(0);id=sheet1_content1.cell(i, 0).valueprint(id)return id

然后通过拼接字符串的形式,将上一步中获取的账号和密码在Request URL中拼接出来,伪造一个浏览器的请求头,开始进行爬虫。然后将爬虫获取到的对象转换为json格式,发现该数据类型为字典,通过字典的基本语法,提取出了token的值。

def sprider1():head1 = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'}url='http://jwxtapp.nmu.edu.cn:8080/bfmzdxhd/patriarch/login?userNo='+user+'&pwd='+pwdr1=requests.get(url,headers=head1)r1.encoding='utf-8'json_token=r1.json()token=json_token['data']['token']# print(token)return token

3 通过token访问成绩页面

经过观察发现,成绩信息是向这个链接发送请求,然后返回的json数据中得到的。同时需要注意在请求头中添加上一步获得的token。

代码实现如下,通过爬虫获得了返回的对象,成绩中有一些无用的字段,在此不做解析,只把它直接返回即可。

def sprider2(token):head2 = {'Referer': 'http://jwxtapp.nmu.edu.cn:8080/jzdxsjd/','token': token,'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'}r2 = requests.get('http://jwxtapp.nmu.edu.cn:8080/bfmzdxhd/student/termGPA?semester=&type=', headers=head2)r2.encoding='utf-8'temp=r2.json()grade=temp["data"][0]return grade

4 解析成绩页面返回的json

该函数主要用于解析字段,需要用到的字段有:课程名,学分,成绩。所以建立几个空列表,用于存储。然后遍历整个grade列表,提取有用的子弹,并append入total列表,最后将列表total与字符串studentName在字典dic中对应起来,实现了一个学生全部成绩的存储。

def extract(grade):global dici=0courseName=[]credit = []score = []total=[]studentName=grade["name"]x=len(grade['achievement'])while i<x:courseName.append(grade['achievement'][i]['courseName'])credit.append(grade['achievement'][i]['credit'])score.append(grade['achievement'][i]['fraction'])total.append(grade['achievement'][i]['courseName'])total.append(grade['achievement'][i]['credit'])total.append(grade['achievement'][i]['fraction'])i=i+1dic[studentName]=total

5 导出数据到Excel

使用函数分别遍历字典dic的key和value,并调用函数将遍历出来的信息写入excel中,因为value的值仍然是一个列表,所以需要用到循环再次进行遍历。
最后就实现了Excel中一个学生的姓名,后面一行对应着其所有的成绩的展示效果。

key=[]
values=[]
table={"1":"里面是不能公开的成绩的json数据"}
for i in dic.keys():key.append(i)
for j in dic.values():values.append(j)
print(key)
print(values)list1=key
output = open('names.xls','w',encoding='gbk')
output.write('name\tgender\tstatus\tage\n')
for i in range(len(list1)):output.write(str(list1[i]))  #write函数不能写int类型的参数,所以使用str()转化output.write('\t')  #相当于Tab一下,换一个单元格output.write('\n')    #写完一行立马换行
output.close()

教务系统爬虫收集学生成绩信息相关推荐

  1. python 绕过国科大教务系统获取所有学生成绩

    python 绕过国科大教务系统爬取十万学生成绩 我发现国科大的教务系统有 bug,今天早上我绕到后台,用 python 爬取了国科大在读和已毕业所有人的成绩,包括本科生和研究生.因为涉及隐私,我也就 ...

  2. 湖南工业大学教务系统爬虫(模拟登陆篇)

    湖南工业大学教务系统爬虫(模拟登陆篇) 之前写了一个教务系统的爬虫程序,可以根据用户要求爬取任何一部分的数据,也可以模拟提交数据,可能这也是部分工大计算机学生比较感兴趣的,所以今天就在这分享一下整个的 ...

  3. 基于jsp+mysql+mybatis+Spring boot简单学生成绩信息管理系统

    1.项目开发背景和意义 随着科学技术的快速发展和不断提高,尤其是计算机科学技术的日渐普及,其功能的强大以及运行速度已经被人们深刻地了解.近几年来高校的办学模式多元化和学校规模的扩大,为了实现对学生信息 ...

  4. 新版方正教务系统爬虫

    新版方正教务系统爬虫 技术 解释 Python 2.7 BeautifulSoup 4.X Pycharm 2017 Firefox - Firebug - 新版教务处地址 218.199.228.4 ...

  5. python输入学号查成绩_Python实践学习笔记:模拟登录教务系统实现微信查成绩

    python+selenium+itchat模拟登录学校教务系统,获取个人成绩,通过微信发送. 先看看最终效果: 〇.背景 学习python一段时间,觊觎学校的教务系统很久了. 寒假开始,大部分同学陆 ...

  6. python制作成绩分析系统_python实现学生成绩测评系统

    本文实例为大家分享了python实现学生成绩测评系统的具体代码,供大家参考,具体内容如下 1.问题描述(功能要求): 根据实验指导书要求,完成相关软件系统的设计,要求内容翔实,条理清晰,图文并茂(流程 ...

  7. C语言学生成绩信息管理系统课程设计报告

    C语言课程设计报告 一 .设计目的 学生成绩管理系统 主要功能: (1)能按学期.按班级完成对学生成绩的录入. 修改,删除 (2)能按班级统计学生的成绩,求学生的总分及 平均分,并能根据学生的平均成绩 ...

  8. 学生成绩表c语言,学生成绩信息表(c语言程序)

    <学生成绩信息表(c语言程序)>由会员分享,可在线阅读,更多相关<学生成绩信息表(c语言程序)(16页珍藏版)>请在人人文库网上搜索. 1. include# include# ...

  9. 学生成绩测评系统python_python实现学生成绩测评系统

    本文实例为大家分享了python实现学生成绩测评系统的具体代码,供大家参考,具体内容如下 1.问题描述(功能要求): 根据实验指导书要求,完成相关软件系统的设计,要求内容翔实,条理清晰,图文并茂(流程 ...

最新文章

  1. 深度学习pytorch--softmax回归(一)
  2. python 线性规划问题_一学高数,线代就头疼?让python帮你解决(内含教程)
  3. jQuery JCrop插件的一个问题
  4. u盘魔术师装linux,小白也能学会的U盘魔术师重装系统教程
  5. 挥泪推荐6款非常非常非常实用的软件!
  6. 搭建结构光三维扫描仪(基于TI资料,PointGrey相机+DLP投影仪搭建成的)
  7. python实验总结与分析_Python实验报告二
  8. html如何在页面打开时让鼠标光标停留在某个表单文本框,网页制作实用技巧
  9. Meta-Weight-Net[NIPS‘2019]:关于元学习/域自适应(meta learning/domain adaptation)优化噪声标签与类别不平衡的问题
  10. 移动云,中国移动算力网络棋局中的关键一子
  11. iphone 日历 灰色_将iPhone假期日历更改为本地日历
  12. 事情往往不是想的那么糟
  13. python内推群_重要!!!陌陌2020校招Python内推通道(含内推直链)
  14. 空间权重矩阵与相关性检验(Stata)
  15. Unable to negotiate with XXXX port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
  16. 弘辽科技:新世相与淘宝直播合作,直播生态困局将有新突破?
  17. 微信小程序显示天气预报
  18. element-tiptap和vuedraggable的拖拽冲突
  19. 互联网大厂薪资真实情况:年薪百万有多难?
  20. 《程序员的自我修养》读书笔记6

热门文章

  1. 阿里测试工程师聊:软件测试需要学什么?
  2. 工业网关下工业自动化设备远程监控解决方案
  3. 纯CSS 毛玻璃效果
  4. css实现毛玻璃效果
  5. 单片机中 读引脚 和读锁存器的区别
  6. InstanceNorm1d
  7. 助力篇|常见金融风控数据分析内容汇总,助你面试道路畅通无阻
  8. 使用不同的命令去打包正式,测试,本地vue项目
  9. Win11安装Ubuntu子系统报错WslRegisterDistribution failed with error: 0x800701bc
  10. 用女人的温暖造就男人的成功