第一百篇,真实可重现,详细实现昨日剩下的功能
这是上一篇Charles抓取数据包操作的实践详细教程,半自动是因为先要取得自己的token和cookie来修改为自己的登录账号,id也需要自己修改。修改的地方基本都替换掉用了中文提示
具体内容放到项目文档里了
项目地址:https://codechina.csdn.net/sabian2/mooc.git
先解决上一篇代码直接使用的SSL错误
上一篇的代码是从Postman直接获得的,Postman也有这个问题,只是关了设置里的ssl就没了,但在python程序运行中,一上来发现访问出错
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.icourse163.org', port=443): Max retries exceeded with url: /web/j/courseBean.getLastLearnedMocTermDto.rpc(Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1076)')))
解决方法:
将网址的https改为http即可,网上讲的verify=False还是过不去,指定证书自己也没弄过,这个方法最简单
获取列表
这一阶段先要从浏览器登录网站后访问课程页面,点击课程列表,以在Charles中取得请求头信息和自己的csrftoken
将下面代码中的payload 的termId改为自己要提取的课程的具体数字,cookie根据格式改成自己的cookie,Charles的cookie显示格式需进行文本替换修改,url里的csrf改为自己的,接着将取得的数据存入文件中,代码直接使用上一篇的代码。
主程序逻辑
读取上一步的数据文件,根据json数据的格式获取自己需要的参数,最终读到的是单元格里的信息
取contentType-内容类型,name-名称,id-id,contentId-内容id
如果内容类型为3,则进入PDF下载函数,如果内容类型为1,则进入视频下载函数
获取文件的相关函数
这个适用于PDF文件自带名称的,如果没有名称的建议多提取一个名称变量给他
第一个函数get_time_stamp13用于获取当前时间戳,替换链接中的batchId,其实在测试中时间戳并不影响文件的获取
第二个函数validateTitle用于去掉文件标题的不可作为文件名的字符,毕竟是文件,好多字符是不被允许的
第三个函数pdfdownload用于提取下载链接并下载,这里注意参数id在后面,contentId在前面,顺序搞错就提取不到了
提取视频2个关键参数
getvidandsignature函数用于访问数据接口,取得这两个参数,并返回值
提取视频地址
这里函数中取质量最好的视频的地址,然后分格式下载,如果是m3u8格式就要调用另一个函数组装
m3u8格式文件下载
这种格式的文件下载步骤分为:
1.下载m3u8文件
2.根据文件读取ts文件名称
3.下载ts文件
4.生成拼接ts的命令,因为调用系统工具,运行是从这个python文件的位置运行的,所以先要进入目录后才能运行拼接命令
5.调用系统命令生成mp4文件
整个下载过程与结果的展示
逐个下载TS文件
生成CMD文件后系统运行的显示过程
下载成功一节课后进入下一节
遇到课件下载课件,遇到其他的类型直接略过
数据文件目录
视频文件夹内的显示效果,可以看到已经生成了视频
具体的都放到项目里了,文章只是讲讲思路
第一百篇,真实可重现,详细实现昨日剩下的功能相关推荐
- 【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载
[风宇冲]Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 (2012-12-09 07:27:51) 转载▼ 标签: unity3d unity unity3d教程 unity3 ...
- cpu对推动计算机发展的作用,一篇能让你详细了解CPU的作用与发展的文章!
原标题:一篇能让你详细了解CPU的作用与发展的文章! Hello,大家好,前面的文章中老李为大家介绍了电脑装机必备的硬件的基础介绍,上次也是篇基础文,写的笼统,简单,有小伙伴在下方留言说希望往深里面写 ...
- iOS开发UI篇-在UItableview中实现加载更多功能
iOS开发UI篇-在UItableview中实现加载更多功能 一.实现效果 点击加载更多按钮,出现一个加载图示,三秒钟后添加两条新的数据. 二.实现代码和说明 当在页面(视图部分)点击加载更多按钮的时 ...
- 乐鑫esp8266学习rtos3.0笔记第6篇:esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网之上增加dns域名解析!(附带demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...
- mac 桌面分屏软件_让你更加详细了解Mac分屏功能
原标题:让你更加详细了解Mac分屏功能 对于只需要简单分屏需求的用户而言,Mac自带的分屏功能已经足够一般用户用了,小小的一个分屏功能可以大大提高我们的工作效率,对于需求不是很深度的普通用户,第三方专 ...
- 关于智能家居,一篇绝对中立的详细指南及各类问题解答
智能家居,这个概念大家真正接触到,也有10年左右了,今天以一个线下代理商的角度出发,将国内的智能家居市场,以中立的态度,帮大家梳理一下,大家购买的时候可以参考参考,有不同看法的,也可以评论区留言交流! ...
- uboot移植之修改支持NandFlash识别篇6(超详细)
uboot移植之前期准备篇1 uboot移植之Makefile分析概述篇2 boot移植之init_sequence_f函数数组分析(番外篇) uboot移植之源码流程分析篇3(超详细!) uboot ...
- 多线程并发知识,肝完这篇10W+字超详细的文章就够了
大家好,我是Oldou,今天又到了我们的学习时间了,本文介绍的是多线程相关的知识,文中的内容可能不是很全,但是学习完一定会让自己掉发升级,内容比较多,但是我们千万别放弃,不懂的地方一定要主动花时间去理 ...
- 1.4万+阅读量,这篇JAMA论文,详细阐述临床试验统计方法,非常值得借鉴!
一般来说,JAMA.新英格兰医学杂志等顶级论文,其统计分析计划,都非常详细,动辄5.60页. 但我今天要说的这篇JAMA主刊的论文,统计分析计划,却只有4页纸,但却用浓缩的语言,给我们讲述了针对不同统 ...
最新文章
- Android应用开发的一些规则
- 【Python】装上后这 14 个插件后,PyCharm 真的是无敌的存在
- 【Keil C51】使用 watch1 来查看变量的值
- 开关和灯泡的对应关系
- 幼儿编程学java不_《终于有人说出来了——Java不适合于作为主要编程教学语言》我的看法...
- 七个重要习惯——读《高效能人士的七个习惯》整理
- C/C++—— #include“stdafx.h”详解
- MyBatis-DynamicSQL IF判断
- 4种语义分割数据集Cityscapes上SOTA方法总结
- Java开发者必须掌握的20个Spring常用注解
- 渲染层网络层错误_网络层IP报文详解和IP的类别?
- python变量_Python变量
- SQL Server游标使用快速上手
- html5 progress css,CSS内容:HTML5进度上的attr()不起作用
- 信道编码与信源编码基本
- 自动化 夏令营 保研
- 好玩好用的网站,不能错过!
- 王之泰201771010131《面向对象程序设计(java)》第七周学习总结
- BottomNavigationBar+viewpager底部导航切换,出现 Fragment already added
- CentOS7如何设置屏幕不休眠