James Hoi's Blog

网易公开课下载器,支持多线程,可分别下载视频及字幕

Word count: 629Reading time: 2 min
2020/03/22 Share

前言

网上一直都找不到网易公开课的下载工具。哎,那不如自己写一个。
我这个工具只能提取易公开课的视频,不能提取网易云课堂

  1. 实现了多线程功能
  2. 实现了提取字幕功能
  3. 实现了选择画质功能
  4. 实现了下载已合成字幕视频功能
  5. 添加了分集下载功能

原理

提取网站内容

在浏览器内的开发者工具的Console内输入__NUXT__.state.movie.moiveList可获取影片列表
img

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模块可以实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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)

参考链接

软件使用教程


可通过以下几种方式下载

方法一.通过新版课程链接进行下载


范例网页

方法二.通过旧版课程链接进行下载


范例网页

方法三.通过视频链接进行下载


范例网页

下载选项

  1. 可选择多少个视频同时下载(线程个数)
  2. 可选择字幕和影片是否分开
  3. 可选择视频画质(如果原视频可以选择)
  4. 可分集下载,用逗号隔开
    例如一共有11集,不需要下载第2集和第6集,填1,3-5,7-11
    下载全部填all,下载当前视频填origin
    若填写课程链接默认下载全部,视频链接默认下载当前视频

效果




家里是100M宽带,经过测试基本能达到满速

项目源码

Github项目

软件下载

Github发布页
微云下载
喜欢的话多给Github项目star和点评吧!!

CATALOG
  1. 1. 前言
  2. 2. 原理
    1. 2.1. 提取网站内容
    2. 2.2. 下载模块
  3. 3. 软件使用教程
    1. 3.1. 方法一.通过新版课程链接进行下载
    2. 3.2. 方法二.通过旧版课程链接进行下载
    3. 3.3. 方法三.通过视频链接进行下载
    4. 3.4. 下载选项
  4. 4. 效果
  5. 5. 项目源码
  6. 6. 软件下载