打开chrome的debugger,简单分析后发现会周期性的发送heartbeat请求,payload如下:
放到本地json文件里看一下:
发现里面有个heart_data数组,并且其中的cp会每次加5,除cp外还有个成员d,把这两个成员和视频的当前时间以及总时间对比,发现刚好是当前视频的秒数以及总的秒数,猜测一个心跳包表示观看了5秒。写个小的python程序验证下猜想:
发送19次,每次让cp值加30,因为每个heartbeat请求有6个heart_data,每个5秒,总共30秒。运行一下,刷新一下雨课堂网页,发现该视频已经学习完成。
到此基本已经搞定,只剩下一些边边角角。分析一下heart_data里面剩余的成员。直接说一下分析的结果。
出了图片里标记出来的,其他都是固定值,剩下的就是找出来所有的视频编号以及视频总时间。回到雨课堂课程首页刷新一下,找到相关请求中的json数据。
但是这里面并没有视频的总时间。再次点击需要观看的视频,找到请求。
其中教室id是固定的。
找到视频时长。现在所有信息均已拿到。简单编程即可。最后结果。
全部视频学习成功。回到雨课堂课程首页。
所有课程已完成。思路分析部分到此结束,下面是代码。
2. 代码
2.1 获取所有视频的id、时长、名字
在课程首页找到获取学习内容的请求,使用copy object选项,拷贝整个json对象。
image.png (120.35 KB, 下载次数: 0)
下载附件
2021-9-14 22:45 上传
拷贝到本地IDE中,格式化一下。
image.png (170.25 KB, 下载次数: 0)
下载附件
2021-9-14 22:46 上传
将整个爬虫程序