这是上一篇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文件后系统运行的显示过程

下载成功一节课后进入下一节

遇到课件下载课件,遇到其他的类型直接略过

数据文件目录

视频文件夹内的显示效果,可以看到已经生成了视频

具体的都放到项目里了,文章只是讲讲思路

第一百篇,真实可重现,详细实现昨日剩下的功能相关推荐

  1. 【风宇冲】Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载

    [风宇冲]Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载 (2012-12-09 07:27:51) 转载▼ 标签: unity3d unity unity3d教程 unity3 ...

  2. cpu对推动计算机发展的作用,一篇能让你详细了解CPU的作用与发展的文章!

    原标题:一篇能让你详细了解CPU的作用与发展的文章! Hello,大家好,前面的文章中老李为大家介绍了电脑装机必备的硬件的基础介绍,上次也是篇基础文,写的笼统,简单,有小伙伴在下方留言说希望往深里面写 ...

  3. iOS开发UI篇-在UItableview中实现加载更多功能

    iOS开发UI篇-在UItableview中实现加载更多功能 一.实现效果 点击加载更多按钮,出现一个加载图示,三秒钟后添加两条新的数据. 二.实现代码和说明 当在页面(视图部分)点击加载更多按钮的时 ...

  4. 乐鑫esp8266学习rtos3.0笔记第6篇:esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网之上增加dns域名解析!(附带demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...

  5. mac 桌面分屏软件_让你更加详细了解Mac分屏功能

    原标题:让你更加详细了解Mac分屏功能 对于只需要简单分屏需求的用户而言,Mac自带的分屏功能已经足够一般用户用了,小小的一个分屏功能可以大大提高我们的工作效率,对于需求不是很深度的普通用户,第三方专 ...

  6. 关于智能家居,一篇绝对中立的详细指南及各类问题解答

    智能家居,这个概念大家真正接触到,也有10年左右了,今天以一个线下代理商的角度出发,将国内的智能家居市场,以中立的态度,帮大家梳理一下,大家购买的时候可以参考参考,有不同看法的,也可以评论区留言交流! ...

  7. uboot移植之修改支持NandFlash识别篇6(超详细)

    uboot移植之前期准备篇1 uboot移植之Makefile分析概述篇2 boot移植之init_sequence_f函数数组分析(番外篇) uboot移植之源码流程分析篇3(超详细!) uboot ...

  8. 多线程并发知识,肝完这篇10W+字超详细的文章就够了

    大家好,我是Oldou,今天又到了我们的学习时间了,本文介绍的是多线程相关的知识,文中的内容可能不是很全,但是学习完一定会让自己掉发升级,内容比较多,但是我们千万别放弃,不懂的地方一定要主动花时间去理 ...

  9. 1.4万+阅读量,这篇JAMA论文,详细阐述临床试验统计方法,非常值得借鉴!

    一般来说,JAMA.新英格兰医学杂志等顶级论文,其统计分析计划,都非常详细,动辄5.60页. 但我今天要说的这篇JAMA主刊的论文,统计分析计划,却只有4页纸,但却用浓缩的语言,给我们讲述了针对不同统 ...

最新文章

  1. Android应用开发的一些规则
  2. 【Python】装上后这 14 个插件后,PyCharm 真的是无敌的存在
  3. 【Keil C51】使用 watch1 来查看变量的值
  4. 开关和灯泡的对应关系
  5. 幼儿编程学java不_《终于有人说出来了——Java不适合于作为主要编程教学语言》我的看法...
  6. 七个重要习惯——读《高效能人士的七个习惯》整理
  7. C/C++—— #include“stdafx.h”详解
  8. MyBatis-DynamicSQL IF判断
  9. 4种语义分割数据集Cityscapes上SOTA方法总结
  10. Java开发者必须掌握的20个Spring常用注解
  11. 渲染层网络层错误_网络层IP报文详解和IP的类别?
  12. python变量_Python变量
  13. SQL Server游标使用快速上手
  14. html5 progress css,CSS内容:HTML5进度上的attr()不起作用
  15. 信道编码与信源编码基本
  16. 自动化 夏令营 保研
  17. 好玩好用的网站,不能错过!
  18. 王之泰201771010131《面向对象程序设计(java)》第七周学习总结
  19. BottomNavigationBar+viewpager底部导航切换,出现 Fragment already added
  20. CentOS7如何设置屏幕不休眠

热门文章

  1. 并列句(2021-07-25)
  2. PP模块--MRP专题一:MRP基本逻辑
  3. 李建忠设计模式之总结
  4. python读json文件数组_如何在python中从json文件读取json对象数组
  5. 揭秘ARM FPU 加速浮点计算
  6. 许纪霖《中华儒家文化发展脉络》思维导图
  7. Python算法之旅元组的风暴之最长上升子序列
  8. python分段函数图像画法_数值实验分段函数图像-Python绘图
  9. 一文看尽2020上半年阿里、腾讯、百度入选AI顶会论文
  10. kuwahara_filter滤波器----MATLAB