写了一个慕课网视频批量下载脚本生成脚本 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
Soar360
V2EX    Javascript

写了一个慕课网视频批量下载脚本生成脚本

  •  8
     
  •   Soar360 2015-10-09 18:15:49 +08:00 14968 次点击
    这是一个创建于 3666 天前的主题,其中的信息可能已经有所发展或是发生改变。

    标题是不是很绕……
    其实就是一段 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++; }); })(); 
    第 1 条附言    2015-10-10 18:32:44 +08:00

    2015 年 10 月 10 日:修正错误下载练习题的问题,感谢 @hronro 的反馈。

    (function () { document.cmd = ''; var dic = {}; function getJsonCallback(json) { var result = json.data.result; var data = { name: result.namespan class="p">, 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++; }); })(); 
    48 条回复    2017-04-22 23:37:08 +08:00
    z742364692
        1
    z742364692  
       2015-10-09 19:18:39 +08:00 via Android
    这个必须赞,电脑上就是不能下载,麻烦
    overlords
        2
    overlords  
       2015-10-09 20:30:18 +08:00   1
    都已经免费了 就不要这样子搞么 投资人看到不好啊。
    Soar360
        3
    Soar360  
    OP
       2015-10-09 20:40:54 +08:00   1
    @overlords 还是需要搞一下,方便离线看。
    uxstone
        4
    uxstone  
       2015-10-09 20:43:32 +08:00
    慕课网靠什么赚钱?

    网易云课堂是含金钥匙出生的
    极客学院有 VIP 机制,
    慕课网全免费,靠什么盈利?
    ksupertu
        5
    ksupertu  
       2015-10-09 20:48:48 +08:00
    @uxstone 教育部开过一个互联网+下一代教育大会
    Soar360
        6
    Soar360  
    OP
       2015-10-09 20:49:57 +08:00
    @uxstone
    有啊、可以帮助推广开发组件啊。比如阿里云、测试平台什么的。
    lxjsmdc
        7
    lxjsmdc  
       2015-10-09 21:34:37 +08:00
    正好下载了在跑步机上看
    iamcho
        8
    iamcho  
       2015-10-09 22:23:53 +08:00
    赞一个
    Dsljlbaby
        9
    Dsljlbaby  
       2015-10-09 22:30:00 +08:00 via Android
    顶一个
    dadaboy
        10
    dadaboy  
       2015-10-09 22:31:31 +08:00
    Like.
    lxjsmdc
        11
    lxjsmdc  
       2015-10-09 22:56:59 +08:00   1
    @Soar360 导出的顺序是乱序的 求改成按顺序从 1 开始的
    Soar360
        12
    Soar360  
    OP
       2015-10-09 23:05:28 +08:00
    @lxjsmdc 下载的顺序是乱的,但是下载完后,观看是就是对得了。
    kappa
        13
    kappa  
       2015-10-09 23:09:51 +08:00
    前端不熟悉,博览网 boolan.com 有办法搞定吗?
    lxjsmdc
        14
    lxjsmdc  
       2015-10-09 23:10:13 +08:00
    @Soar360 最近正在学 JS 很奇怪这例子。获取到的是按顺序的,怎么打印输出顺序就不对了了,望赐教。


    还有,有什么方法,例如迅雷或者百度云等云空间,批量导入的同时支持自定义文件名的呢
    lxjsmdc
        15
    lxjsmdc  
       2015-10-09 23:34:28 +08:00
    @Soar360 wget -O 的值是中文会乱码 求解决方法
    badcode
        16
    badcode  
       2015-10-10 08:09:07 +08:00 via iPhone
    好吧! IDM 足矣
    wuhuaji
        17
    wuhuaji  
       2015-10-10 09:10:24 +08:00
    @lxjsmdc 我这里并没有乱码,你可以说下你的具体什么情况
    Rico
        18
    Rico  
       2015-10-10 09:17:43 +08:00
    太实用了,大赞!
    cszchen
        19
    cszchen  
       2015-10-10 09:25:19 +08:00
    做成浏览器插件会不会好一点
    Soar360
        20
    Soar360  
    OP
       2015-10-10 09:28:27 +08:00
    @cszchen 是会好一点,但是没做过……你可以试下,我毕竟不是专业搞前端的。
    del1214
        21
    del1214  
       2015-10-10 09:36:47 +08:00
    好像没有效果啊
    del1214
        22
    del1214  
       2015-10-10 09:39:24 +08:00
    用错地方了,还真好用
    Heavytiger
        23
    Heavytiger  
       2015-10-10 11:49:32 +08:00
    真心好用。 thanks very much!
    Myflos
        24
    Myflos  
       2015-10-10 12:05:51 +08:00
    大赞!要是能自动改名就更好了
    @Soar360
    Soar360
        25
    Soar360  
    OP
       2015-10-10 12:09:49 +08:00
    @Myflos
    是自动更名啊。
    Rico
        26
    Rico  
       2015-10-10 12:22:14 +08:00
    win 下把脚本放入一个 txt 文件然后

    ```
    @echo off
    for /f "tokens=*" %%i in (download.txt) do (start cmd /c %%i & ping -n 2 127.1>nul)
    pause
    ```

    保存成 bat
    就会批量下载了,wget 的多任务貌似不能同时
    nijux
        27
    nijux  
       2015-10-10 12:27:28 +08:00
    移动端都有离线功能 可以下载下来的
    zjqzxc
        28
    zjqzxc  
       2015-10-10 12:28:39 +08:00
    @Rico wget 单进程单线程,同时下载就多开几个 screen 。
    没试过能不能 axel 多线程,如果能的话其实一个一个下问题也不大。
    zjqzxc
        29
    zjqzxc  
       2015-10-10 12:45:37 +08:00
    @Rico axel -n 10 单任务已经把带宽跑满了,,不打算纠结多任务了。
    第 7 行改为: var cmd = 'axel -n 10 -o "' + dic[data.id] + " - " + data.name + '.mp4" ' + data.url;
    -n 后面的值根据总带宽除以 wget 稳定后的速度再稍微富裕几个线程
    Soar360
        30
    Soar360  
    OP
       2015-10-10 13:36:52 +08:00
    @zjqzxc 有的搞,谢谢。
    Rico
        31
    Rico  
       2015-10-10 13:45:37 +08:00
    嗯.谢谢!
    Rico
        32
    Rico  
       2015-10-10 13:46:05 +08:00
    @zjqzxc 嗯,谢谢
    intsilence
        33
    intsilence  
       2015-10-10 14:33:26 +08:00
    很实用,感谢。
    M4ster
        34
    M4ster  
       2015-10-10 14:50:04 +08:00
    用 Node.js 写了个 imooc 小爬虫
    https://github.com/monkeym4ster/imooc_crawler
    bozong
        35
    bozong  
       2015-10-10 14:55:52 +08:00
    @M4ster 666666
    M4ster
        36
    M4ster  
       2015-10-10 15:49:40 +08:00
    Screenshot:
    hronro
        37
    hronro  
       2015-10-10 15:52:21 +08:00
    有个小 bug ,有的章节可能是练习题,但是还是把它解析成 MP4 了
    Soar360
        38
    Soar360  
    OP
       2015-10-10 16:16:51 +08:00
    @hronro 能给个链接吗?
    fishlee
        39
    fishlee  
       2015-10-10 17:22:19 +08:00 via Android
    谢谢,先拿去了
    angusun
        40
    angusun  
       2015-10-10 17:31:43 +08:00
    mark
    hronro
        41
    hronro  
       2015-10-10 18:02:21 +08:00
    @Soar360 嗯,找了个这种情况特别多的:
    http://www.imooc.com/learn/141
    https://ooo.0o0.ooo/2015/10/10/5618e212e3c6d.png
    Soar360
        42
    Soar360  
    OP
       2015-10-10 18:32:58 +08:00
    @hronro 搞定了,谢谢。
    mgcnrx11
        43
    mgcnrx11  
       2015-10-11 10:54:30 +08:00
    报告一下:使用 @M4ster 的 coffee 脚本在下载 337 课程的时候抱错,貌似是解析的问题
    M4ster
        44
    M4ster  
       2015-10-11 12:02:20 +08:00
    @mgcnrx11 感谢反馈。已对文件名进行特殊符号替换为下划线处理 ;-)
    LSkyler
        45
    LSkyler  
       2015-10-14 20:12:10 +08:00
    太实用了,大赞!o.
    fhefh
        46
    fhefh  
       2015-12-04 13:04:16 +08:00
    正好有要下载的教程 嘿嘿
    zb3040
        47
    zb3040  
       2017-04-21 13:55:03 +08:00
    请教楼主现在这个脚本还在更新吗? http://www.imooc.com/learn/822 ,这个视频用着段脚本获取不到 url
    Soar360
        48
    Soar360  
    OP
       2017-04-22 23:37:08 +08:00
    @zb3040 已经被封杀了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2834 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 14:20 PVG 22:20 LAX 07:20 JFK 10:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86