前言
网上一直都找不到网易公开课的下载工具。哎,那不如自己写一个。
我这个工具只能提取易公开课的视频,不能提取网易云课堂
实现了多线程功能
实现了提取字幕功能
实现了选择画质功能
实现了下载已合成字幕视频功能
添加了分集下载功能
原理
提取网站内容
在浏览器内的开发者工具的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模块可以实现
import requests
import time
def 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
若填写课程链接默认下载全部,视频链接默认下载当前视频
效果
image.png (27.53 KB, 下载次数: 0)
2020-3-22 23:29 上传
image.png (110.7 KB, 下载次数: 1)
2020-3-22 23:30 上传
家里是100M宽带,经过测试基本能达到满速
image.png (25.7 KB, 下载次数: 1)
2020-3-23 11:27 上传
项目源码
软件下载