前言
av8d大家好鸽了几个月的我又回来了!
在上一篇用Python查询成绩|(一)网络爬虫基础知识中我大概的讲了一下网络爬虫的基础知识,这一篇就有干货了啊,直接开始模拟登录教务网。
本篇内容
1, 用 Python 模拟登录教务网
2, 获取成绩
以下代码均可以在我的 Github 上找到:
https://github.com/DuChuan19/NkemisScoreSpider
免责声明:本文仅供学习交流,如出现任何法律问题本人概不负责!
用 Python 模拟登录教务网
整体思路
1,向登录界面发送登录请求,POST 一系列参数,包括账号、密码等,获得响应,提取一些关键参数
2,得到参数重新发送登录请求,POST 参数之后即可登录
第一次向登录界面发送请求
第一次向登陆页面发送请求,是为了看看需要 POST 哪些参数,光提交账号密码是肯定不行的。
![334e881f80e009f8a82d523ac7f97411.png](https://img-blog.csdnimg.cn/img_convert/334e881f80e009f8a82d523ac7f97411.png)
这里可以看除了账号密码还有另外的四个参数,分别是__VIEWSTATE
、__VIEWSTATEGENERATOR
和ImageButton1.x
、ImageButton1.y
,前两个经过分析可以在登录页面找到
![c3b39019c81d3ccef9a1135b3e376999.png](https://img-blog.csdnimg.cn/img_convert/c3b39019c81d3ccef9a1135b3e376999.png)
我们可以通过 requests 的 get 方法得到
后面两个应该是登录按钮的位置
![99d0cb702095cf3d0f1aed18613df47e.png](https://img-blog.csdnimg.cn/img_convert/99d0cb702095cf3d0f1aed18613df47e.png)
然后可以通过以下代码来得到需要的参数,账号密码可以手动输入
1
第二次向登录界面发送请求
这次请求需要包含以上获得的参数,不然没法得到正确的响应
直接来看代码:
1session = requests.session()
关于 session 的详细说明以及用法,可以访问官方文档进行查看
这里我大概的说一下
requests 库的 session 对象能够帮我们跨请求保持某些参数,也会在同一个 session 实例发出的所有请求之间保持cookies
所以我们发送了带有登录参数的数据,如果参数正确,就能登录成功了
![0ea7c45b97989931116ee24d83ce64f8.png](https://img-blog.csdnimg.cn/img_convert/0ea7c45b97989931116ee24d83ce64f8.png)
获取成绩
成功登录教务网之后,接下来便是获取成绩了
我们需要获取的数据只有两个,课程标题以及对应的总评成绩
这里有两种方法,一种是通过正则表达式来获取,另一种是用 pandas 库
用正则表达式来获取成绩
![8c1b3ae0e36e7f58c348cd1d14839822.png](https://img-blog.csdnimg.cn/img_convert/8c1b3ae0e36e7f58c348cd1d14839822.png)
可以看到,课程名称和总评成绩都包含在 tr 标签下
为了方便看,我把课程名称和总评成绩分开写
1