前言 网上一直都找不到网易公开课的下载工具。哎,那不如自己写一个。 我这个工具只能提取易公开课的视频,不能提取网易云课堂
实现了多线程功能
实现了提取字幕功能
实现了选择画质功能
实现了下载已合成字幕视频功能
添加了分集下载功能
原理提取网站内容在浏览器内的开发者工具的Console内输入__NUXT__.state.movie.moiveList可获取影片列表
index:视频列表索引__NUXT__.state.movie.moiveList视频列表__NUXT__.state.movie.moiveList[index].title视频名称__NUXT__.state.movie.moiveList[index].mp4SdUrl标清视频链接__NUXT__.state.movie.moiveList[index].mp4HdUrl高清视频链接__NUXT__.state.movie.moiveList[index].mp4ShdUrl超清视频链接__NUXT__.state.movie.moiveList[index].mp4ShareUrl手机观看视频链接(包含字幕)
__NUXT__.state.movie.moiveList[index].subList字幕列表__NUXT__.state.movie.moiveList[index].subList[inx].subName字幕语言__NUXT__.state.movie.moiveList[index].subList[inx].subUrl字幕链接
然后用Python的Selenium模块通过运行js脚本提取data = driver.execute_script("return <__NUXT__命令>")
下载模块用requests模块可以实现
123456789101112131415161718192021222324import requestsimport timedef downloadFile(url,path, name): r = requests.get(url, stream=True,verify=False) length = float(r.headers['content-length']) f = open(path+name, 'wb') count = 0 count_tmp = 0 time1 = time.time() for chunk in r.iter_content(chunk_size=512): if chunk: f.write(chunk) count += len(chunk) if time.time() - time1 > 2: p = count / length * 100 speed = (count - count_tmp) / 1024 / 1024 / 2 count_tmp = count print(name + ': ' + formatFloat(p) + '%' + ' Speed: ' + formatFloat(speed) + 'M/S') time1 = time.time() f.close()def formatFloat(num): return '{:.2f}'.format(num)
参考链接
软件使用教程可通过以下几种方式下载
方法一.通过新版课程链接进行下载范例网页
方法二.通过旧版课程链接进行下载范例网页
方法三.通过视频链接进行下载范例网页
下载选项
可选择多少个视频同时下载(线程个数)
可选择字幕和影片是否分开
可选择视频画质(如果原视频可以选择)
可分集下载,用逗号隔开例如一共有11集,不需要下载第2集和第6集,填1,3-5,7-11下载全部填all,下载当前视频填origin若填写课程链接默认下载全部,视频链接默认下载当前视频
效果家里是100M宽带,经过测试基本能达到满速
项目源码Github项目
软件下载Github发布页微云下载喜欢的话多给Github项目star和点评吧!!