吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7518|回复: 23
收起左侧

[Python 原创] [Python][爬虫]网易公开课下载器,支持多线程,可分别下载视频及字幕

[复制链接]
JamesHoi 发表于 2020-3-22 22:09
本帖最后由 JamesHoi 于 2020-3-23 11:33 编辑

前言

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

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

原理

提取网站内容

在浏览器内的开发者工具的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)

参考链接

软件使用教程


可通过以下几种方式下载

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


范例网页

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


范例网页

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


范例网页

下载选项

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

效果

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

项目源码

Github项目

软件下载

Github发布页
微云下载


喜欢的话多给Github项目star和点评吧!!

免费评分

参与人数 9吾爱币 +14 热心值 +8 收起 理由
hehehero + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
85502992 + 1 + 1 谢谢@Thanks!
ericzhang1912 + 1 + 1 厉害了,能加入慕课就更完美了
tenghaozzz + 1 热心回复!
wushaominkk + 5 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
femten + 1 + 1 谢谢@Thanks!
yanglinman + 1 谢谢@Thanks!
kofdy + 2 + 1 用心讨论,共获提升!
Pandolar + 2 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| JamesHoi 发表于 2020-3-22 22:48
本帖最后由 JamesHoi 于 2020-3-22 23:16 编辑
我已经写好的软件不支持拿收费的视频,但若能打开视频网页(试看的我试过可以,付费的不知道),在浏览器的开发者工具的Console里面输入
[JavaScript] 纯文本查看 复制代码
document.getElementsByTagName("video").vjs_video_3_html5_api.src

然后命令行会返回当前网页视频链接


假如要拿字幕,开发者工具->Network,选XHR。找到vvt文件,将vvt链接后缀改为.srt即为字幕链接
image.png
例如vvt链接为http://nos.netease.com/oc-caption-srt/oc-srt-1370689238514.vvt
则srt链接为http://nos.netease.com/oc-caption-srt/oc-srt-1370689238514.srt
 楼主| JamesHoi 发表于 2020-3-23 11:38
本帖最后由 JamesHoi 于 2020-4-14 15:14 编辑
破风 发表于 2020-3-23 10:39
有网易云课堂的吗

(我是因为网上找不到网易公开课的我才自己写了一个)
除了网易公开课,其他的例如 中国大学MOOC、学堂在线、网易云课堂、好大学在线、爱课程 MOOC 课程,建议用这个
网址:https://mooc.xoy.io/#/specific/study-163-mooc
 楼主| JamesHoi 发表于 2020-6-13 23:03
85502992 发表于 2020-6-13 18:28
复制不进去,不知道为什么,我的系统是win7的

右键cmd,选择 "属性" -> "选项" -> "编辑选项" -> 把快速编辑模式勾选上,如下图:
e0c73a2fa872941f2c63a8697b5e4a237871e6de.jpg
参考一下这个:
https://blog.csdn.net/ricky_yangrui/article/details/81941299
https://jingyan.baidu.com/article/1876c852bcab82890b13768f.html
decade10 发表于 2020-3-22 22:27
明天试试,优秀哦
taozididi 发表于 2020-3-22 22:46
收费能不能
sushaka 发表于 2020-3-22 22:50
谢谢楼主分享
ciker_li 发表于 2020-3-22 22:57
有收费的就厉害了
efujin 发表于 2020-3-22 23:02
mark,手机已阅,明天PC尝试下
天高云淡945 发表于 2020-3-22 23:06
感谢分享
esky1981 发表于 2020-3-22 23:15
非常感谢,谢谢分享!
Parkourr 发表于 2020-3-23 00:08
秀秀,大佬分享感谢感谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 21:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表