首页 > 前端 > javascript + wget 实现批量下载慕课网视频

javascript + wget 实现批量下载慕课网视频

慕课网(IMOOC)是学习互联网IT技能的免费平台,它提供了丰富优质的课程资源。本文只做学习参考使用,慕课网是个好东西,请勿用于不当用途!

 

一、前言

没网或者在网络不理想的情况下想要看慕课网的视频教程往往比较麻烦,而慕课网又没有提供教程视频的下载功能,用Chrome插件等等方法也只能一个一个视频地下载,并且下载下来的视频往往没有标题,这时就需要用到批量下载这个方法了。

 

二、分析慕课网

既然是要下载视频,首先是得找到视频url。进入慕课网视频教程页面,例如:http://www.imooc.com/learn/453。打开调试窗口,找到每个小节视频对应的元素,发现它们之间是用一串数字来区分的,即每个视频都有一个对应的id:

2016050303025428

 

那么只要通过选择器就可以选出课程页面的所有视频了:

$(".studyvideo").each(function () {
    //视频id
    var id = $(this).attr('href').split('video/')[1];
    //视频标题
    var name = $(this).text().replace(/\(.*\)|\s/g,'') + '.mp4';
});

 

拿到视频id和标题后,就只差视频地址了。

找一个小节点进去(转到了 http://www.imooc.com/video/8983 ),在Network里查看请求(Response选项卡),输入视频id进行过滤,依次查看匹配的几个的请求,发现有一个出现了“mp4”的字眼:

2016050303025536

 

然后切换到Preview选项卡就可以发现视频的源地址了,在请求中我们可以看到“mpath”数组有三个元素,分别对应三种不同清晰度的视频地址:

2016050303025635

 

所以,我们可以这样取出json路径:

var path = "http://www.imooc.com/course/ajaxmediainfo/?mid=" + id + "&mode=flash";

 

通过json路径,再获取json数据,这里直接用JQuery的getJSON()方法来取出视频源地址:

$.getJSON(path,function(json) {
    var result = json.data.result;
    //取出视频源地址
    //此处存在三种清晰度 ———— mapth[0]:超清 mapth[1]:高清 mapth[2]:普清,
    //这里默认选择超清画质:mapth[0]
    var url = result.mpath[0];
})

 

拿到视频源地址后,就可以结合下载工具进行下载了。这里选的下载工具是wget,那就按wget的命令行格式拼接一下(如果不懂wget的话可以看另一篇博客:在Windows下使用Wget,Linux下使用方法大同小异):

//这里拼接成wget命令行语句,方便使用wget进行批量下载
var downloadItem = 'wget -O -c "' + name + '" ' + url;
document.downloadList += downloadItem;
document.downloadList += '\r\n';

 

三、完成

下面是全部代码:

//慕课网是个好东西,请勿乱跑脚本
(function () {
    document.downloadList = '';
    $(".studyvideo").each(function () {
        //视频id
        var id = $(this).attr('href').split('video/')[1];
        //视频标题
        var name = $(this).text().replace(/\(.*\)|\s/g,'') + '.mp4';
        //视频json路径
        var path = "http://www.imooc.com/course/ajaxmediainfo/?mid=" + id + "&mode=flash";

        //解析json回调数据
        $.getJSON(path,function(json) {
            var result = json.data.result;
            //视频源地址
            //此处存在三种清晰度 ———— mapth[0]:超清 mapth[1]:高清 mapth[2]:普清,
            //这里默认选择超清画质:mapth[0]
            var url = result.mpath[0];

            //这里拼接成wget命令行语句,方便使用wget进行批量下载
            var downloadItem = 'wget -O -c "' + name + '" ' + url;
            document.downloadList += downloadItem;
            document.downloadList += '\r\n';
        })
    });
})();

 

四、下载

将它复制到Chrome控制台运行,再输入document.downloadList回车就能拿到以wget命令行格式写出的下载字符串:

2016071912352337

复制双引号内的内容,到wget目录下直接粘贴就可以开始批量下载了(如果不懂wget的话可以看另一篇博客:在Windows下使用Wget,Linux下使用方法大同小异)。

Enjoy~

 

参考博客:教你一步一步用 Node.js 制作慕课网视频爬虫 By@laizw


本文标题:javascript + wget 实现批量下载慕课网视频
转载请注明出处,欢迎分享