基于python实现网络课程秒刷系列二

最近看了公众号的后台数据,发现很多人对刷网络学时的关注度比较高,所以最近利用工作之余的时间,又捣腾了一个网络学习平台,下面就介绍下整个流程,以下内容仅做技术交流。

基于python实现网络课程秒刷系列二_第1张图片

首先,这是一个官方的网络学习平台,在网页的左上角处有一个登录窗口,通过刷新界面抓包可以获取到验证码图片的信息,如下图所示。

基于python实现网络课程秒刷系列二_第2张图片

由于此处验证码获取有时,headers中带了一个cookie值,因此在获取验证码信息的时候,我们需要先获得到cookie值。根据经验,一般这个cookie值在网页首次打开的时候就会得到,故我们清空浏览器的记录,重新刷新该网页,就获得到了如下数据。

基于python实现网络课程秒刷系列二_第3张图片

接着就是要知道登陆过程是否有加密。同样的,我们在网站上真实的登录一次,然后分析获取的数据包,即可。如下所示。

基于python实现网络课程秒刷系列二_第4张图片

从图上可以看出,这边的登录并未做任何加密,账号和密码都是明文传输,这对后面的代码模拟就更加简单了。这边稍微解释下每个参数的意思:

name:账号

pwd:密码

czlx:操作类型(首字母直译),这边为登录

code:验证码

登录后点击左侧的年度必须,就可以看到需要完成的课程内容。

基于python实现网络课程秒刷系列二_第5张图片

数据包信息如下:

基于python实现网络课程秒刷系列二_第6张图片

简单分析下该数据包,该请求为post请求,其中所带的cookie值为上文所提到中的cookie为一致的,请求参数有id,pc,xyid,czlx这四个,其中前两个参数固定不变,后面两个参数会根据不同登录的者的不同操作会存在变化,其中xyid为学员id,czlx为操作类型,此处所带参数为bxkc,直译为必修课程。

那么该请求返回值为json,该json就是所有必修课程的信息,用第一条数据展开解释、其中bt代表标题,dzs代表点赞数,fbsj代表发布时间,id,jd代表进度,sc未知,xf代表学分,yhxf代表已获学分,dzs代表点赞数,zylb代表资源类别。那么初步猜测,id是我们后面会用到的参数,即下文提到的courseID,而jd即可判断该课程是否完成学习。

在上述的分析中,有个学员id我们并未提到是如何获取到的,其实在登录成功时,有个一个数据包被我们遗漏了。

基于python实现网络课程秒刷系列二_第7张图片

该数据中返回的是一个网页数据,该网页数据里面带有该登录者的学员id,后期我们通过BeautifulSoup即可解析出该字段。

接着,我们打开一个视频,认真的观看完毕后,就会获取到发送的数据包,具体如下所示。

基于python实现网络课程秒刷系列二_第8张图片

基于python实现网络课程秒刷系列二_第9张图片

此处需要发送的参数有8个,且发送的数据竟然跟在链接后,感觉写法好奇怪。。。(对程序员的默默吐槽,写的是啥玩意...)。其中kjkid和newmx我们还未获取到,其余参数几乎都能获取到或猜测出大致意思。

因为这些参数是在视频结束的时候带上的,那么它们的获取一定是在此之前通过某个请求得到的或者通过某种方式计算出来。根据参数命名的含义,我们可以大胆猜测为第一种,即通过某个请求获得的,故我们继续回过头去寻找被我们遗漏的数据包信息。

在视频打开时候,有个数据包被我们忽略了。如下图所示。

基于python实现网络课程秒刷系列二_第10张图片

通过该数据包返回的信息,我们可以获取到kjkid和newmx。

以上全过程分析后,便可通过python模拟,代码实现较为简单,重在过程分析,故此处就不粘贴代码。

对爬虫有兴趣的小伙伴,可以给我留言或私聊我,我们可以互相讨论学习。

欢迎关注我个人的公众号

你可能感兴趣的:(Python,爬虫,python)