慕課網視頻下載

1.使用js腳本批量下載慕課網視頻html

慕課網(http://www.imooc.com/)上有不少不錯的視頻,固然我不是來給慕課網打廣告的,我本人學習過不少慕課網上的免費的視頻。前端

在線看若是網速慢時,可能會有卡頓,沒網時沒法觀看。全部說下載到本地,離線看視頻是很是不錯的選擇。慕課網上沒提供下載視頻的入口,想下載到本地怎麼辦?java

若是一次下載一個視頻,那是very very easy,不用第三方工具就能搞定。jquery

1.打開谷歌或谷歌內核的瀏覽器,按F12鍵,打開開發人員工具,地址欄輸入http://www.imooc.com/video/2678(示例,觀看的視頻地址),回車進入此頁面,開發人員工具>Network>Media,這裏咱們就能找到這個視頻的真實地址linux

光標移動到這個地址上,點鼠標右鍵,選擇Open link in new tab,會在新的頁面打開此視頻ajax

在這個頁面上按Ctrl+S就能夠把這個視頻保存到本地磁盤上。shell

這個方法雖然很笨,卻能下載你想要的視頻。json

或者咱們能夠拷貝視頻地址,用迅雷等工具下載。windows

還能夠用傲遊等瀏覽器或經過插件來監視視頻地址,迅雷等下載軟件也能監視瀏覽器上的視頻地址,來下載視頻,可是提示的視頻名稱並非咱們想要的瀏覽器

 

這個視頻應該叫AngularJS實戰2-1 MVC(1).mp4,軟件自動給的名字叫MVC(1) -慕課網.mp4,還得去更名字。

這樣咱們下載單個視頻沒什麼問題,可是,若是咱們須要批量下載十幾個甚至幾十個視頻時,每一個頁面去點開,去修改視頻的名字,是否是很麻煩呢?

 爲此我想了不少辦法,如寫後臺代碼請求一個頁面,獲取該頁面全部的請求,找到視頻的那個請求,而後把視頻下載下來,但無法現實。

到網上找了一些相關資料,有人說用Fiddle類庫,我嘗試過,又失敗了。

從後臺入手搞不定,因而我嘗試從前端入手。

按Ctrl+S,將頁面保存到本地,而後使用Notepad++搜索視頻地址http://v1.mukewang.com/d88f32c5-3e66-44ab-ab7b-0f0383edfba8/L.mp4中的部分字符串v1.mukewang.com

找到對應文件的代碼,經過分析video.js,肯定getMediaInfo()是用來獲取視頻的地址

http://www.imooc.com/course/ajaxmediainfo/?mid=2678&mode=flash這個請求傳了個mid和mode,mid就是http://www.imooc.com/video/2678即當前頁面的參數。

咱們只須要將頁面地址video後面的數字發送到http://www.imooc.com/course/ajaxmediainfo/?mid={數字}&mode=flash,就能拿到當前頁面視頻的地址,返回的數據中集合包含3個地址,分別爲普清、高清、超清。可根據本身須要,下載對應的視頻。

雖然如今咱們能拿到視頻的地址,可是咱們依然只是單個視頻操做。這時,咱們返回到這個頁面的上個頁面,即視頻列表頁面http://www.imooc.com/learn/156

使用jquery選擇器,拿到這個頁面的視頻教程超連接的href,再發送請求,就能夠拿到每一個頁面的視頻地址

按F12點擊Console,將下面代碼粘貼到控制檯,按下【Enter】鍵。

複製代碼
 1 var selector = 'a.J-media-item';
 2 var videoes = [];
 3 var xmlStr = '<?xml version="1.0" encoding="utf-8" ?><videoes>';
 4 var dict = {};
 5 var total = $(selector).length;
 6 var textStr = '';
 7 $(selector).each(function(i, e) {
 8     var href = this.href;
 9     var vid = href.substring(href.lastIndexOf('/') + 1, href.length); // this.href.replace('http://www.imooc.com/video/', '');
10     var name = this.innerText;
11     var pattern = /\(\d{2}:\d{2}\)/;
12     if (!pattern.test(name)) {
13         total--;
14         if (i == $(selector).length - 1 && !total) {
15             console.log('沒有視頻能夠下載!');
16         }
17         return;
18     };
19     name = name.replace(/\(\d{2}:\d{2}\)/, '').replace(/\s/g, '');
20     //name += '.mp4';
21     dict[vid] = name;
22     $.getJSON("/course/ajaxmediainfo/?mid=" + vid + "&mode=flash", function(data) {
23         var url = data.data.result.mpath[2];
24         videoes.push({
25             url: url,
26             name: name
27         });
28         xmlStr += '<video><url>' + url + '</url><name>' + name + '</name></video>';
29         textStr += 'filename=' + name + '&fileurl=' + url + '\n';
30         if (videoes.length == total) {
31             console.log('共' + total + '個視頻。');
32             console.log('已完成' + videoes.length + '個視頻。');
33             //console.log(JSON.stringify(videoes));
34             xmlStr += '</videoes>';
35             //console.log(xmlStr);
36             console.log(textStr);
37             console.log($('.hd .l').text());
38         };
39     });
40 });
複製代碼

運行結果以下:

你們有沒有發現,全部的視頻都叫L.mp4,是否是沒有意義,這就是我爲何要想方設法獲取視頻超連接中的文本的緣由。頁面上38個視頻名稱和地址都拿到了,

我將視頻數據格式化成filename=文件名&fileurl=視頻地址,還能夠根據本身須要格式化成xml、json等。

接下來使用IDM批量導入助手.exe將這些視頻地址導入到idm中,固然你也能夠批量導入到迅雷中,但文件名會所有變成L.mp4

 

 

導入成功後,就能夠批量下載啦,大功告成!

 

2. Java實現的慕課網視頻下載工具

  做爲一個IT汪,本身常常在慕課網上看視頻學些混飯吃的挨踢打怪技能,本身以爲慕課網的視頻短小,不拖泥帶水,結構清晰。若是能把視頻分章節都保存下來的話那就行了。
慕課網的app提供了緩存的功能,可是手機內存有限啊(本身的手機的存儲都是乞丐版的16G的),存不了幾個視頻就滿了。慕課網的app緩存到手機內存卡,是能播放的mp4文件,可是問題來了,這些視頻文件的命名是數字,我累個去,即便你把視頻從內存卡里導出也要一個個的看一便再將其歸類,太麻煩了。本身以前寫了個爬蟲程序來對這些不按照內容命名的視頻文件進行重命名,本身用的還行,但仍是以爲麻煩,因而直接寫了個完整的下載工具。

  支持多線程並行下載(我把並行最大下載量限制在了3個,之前併發太大實習工地的網管說我掛迅雷)和斷點續傳(這個要感謝網友提供的代碼)哦!其實原理真的很簡單,衆多的技術大神們可不要見笑啦!
使用時安裝好運行java的雞蛋殼(JDK),windows、linux、mac os下均可以用,下載後解壓,按照圖中的命令執行jar文件就好了,下載的時候會在jar文件所在文件夾下建立保存目錄!

  下面是下載完成後的文件目錄,文件的名稱保持了原有章節的順序,而且顯示了視頻時長。

2015-11-29_172759

下載地址在這裏:http://pan.baidu.com/s/1mgERRCW

 

3. 慕課網視頻批量下載腳本生成腳本

標題是否是很繞……
其實就是一段 Javascript 代碼,用來生成批量下載視頻的 shell 代碼。

首先進入教程學習頁面,好比這個: http://www.imooc.com/learn/514

而後 F12 打開控制檯( Chrome 瀏覽器),把寫好的腳本粘貼執行。

執行完畢後,再輸入:「 document.cmd 」就能夠拿到下載命令了。直接 shell 執行或者在 Windows 下搞一個 wget 放在同級目錄便可。

腳本以下:

(function () { document.cmd = ''; var dic = {}; function getJsonCallback(json) { var result = json.data.result; var data = { name: result.name, id: result.mid, url: result.mpath[0] }; var cmd = 'wget -O "' + dic[data.id] + " - " + data.name + '.mp4" ' + data.url; console.log(cmd); document.cmd += cmd; document.cmd += '\r\n'; } var index = 1; $('.J-media-item').each(function () { var url = $(this).attr('href'); var id = url.split('/')[2]; var jsonPath = "http://www.imooc.com/course/ajaxmediainfo/?mid=" + id + "&mode=flash"; dic[id] = index; $.getJSON(jsonPath, getJsonCallback); index++; }); })(); 
 

2015 年 10 月 10 日:修正錯誤下載練習題的問題,感謝 @hronro 的反饋。

(function () { document.cmd = ''; var dic = {}; function getJsonCallback(json) { var result = json.data.result; var data = { name: result.name, id: result.mid, url: result.mpath[0] }; var cmd = 'wget -O "' + dic[data.id] + " - " + data.name + '.mp4" ' + data.url; console.log(cmd); document.cmd += cmd; document.cmd += '\r\n'; } var index = 1; $('.J-media-item').each(function () { var url = $(this).attr('href'); var data = url.split('/'); var type = data[1]; var id = data[2]; if(type != 'video'){ return; } var jsonPath = "http://www.imooc.com/course/ajaxmediainfo/?mid=" + id + "&mode=flash"; dic[id] = index; $.getJSON(jsonPath, getJsonCallback); index++; }); })();


4.慕課網視頻在線解析
http://imooc.e12e.com/

慕課網視頻批量下載工具

相關文章
相關標籤/搜索