Winse Blog

走走停停, 熙熙攘攘, 忙忙碌碌, 不知何畏.

批量下载163-open的视频

163的视频资源还是挺丰富的,默认情况下必须用客户端下载。感觉挺麻烦的,对于网络慢的情况可能要下很久,如果能用下载工具批量下载就好了。

首先从视频播放页面获取下载的地址(查看下载按钮的js):

1
appsrc : 'http://mov.bn.netease.com/open-movie/nos/mp4/2015/01/19/SAFDACJPD_sd.m3u8',
  • 然后从列表页获取列表所有视频的详情URL,
  • 然后从详情URL获取appsrc的地址,
  • 最后把后缀m3u8改成mp4。当然还可以把视频的名称优化下。

下面结合【chrome调试工具】、【notepad++】、【shell】来获取视频的下载地址:

  1. F12使用js获取列表详情URL
1
$("#list2").find("tr >td.u-ctitle a").each(function(i,node){console.log($(node).attr("href"));})

使用notepad++的列处理功能 处理chrome输出的信息只留下URL保存到url.txt,如 http://open.163.com/movie/2008/1/1/H/M6SGF6VB4_M6SGL3P1H.html

这里用同样的步骤也把视频列表的名称获取到,用于后面的视频重命名:

1
$("#list2").find("tr >td.u-ctitle a").each(function(i,node){console.log($(node).text());})
  1. 使用SHELL获取详情页面的URL
1
$ cat url.txt | while read line ; do if [ "$line" != '' ] ; then curl -s $line | grep -a appsrc ; fi ; done

获取到的数据同样包含一些不需要的信息,使用notepad++进行裁剪。提取 http://mov.bn.netease.com/open-movie/nos/mp4/2015/01/19/SAFDCDGNA_sd.m3u8 的视频地址,使用replace把m3u8替换成mp4,然后把URL复制到迅雷下载的下载框即可批量下载了。

  1. 重命名

给获取到的视频的名称加上顺序标识,然后弄成重命名的命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mv SAFD8B131_sd.mp4  01机器学习的动机与应用.mp4
mv SAFD8D355_sd.mp4  02监督学习应用.梯度下降.mp4
mv SAFD8O947_sd.mp4  03欠拟合与过拟合的概念.mp4
mv SAFD8PQO8_sd.mp4  04牛顿方法.mp4
mv SAFD94US8_sd.mp4  05生成学习算法.mp4
mv SAFD97CGO_sd.mp4  06朴素贝叶斯算法.mp4
mv SAFD9I82D_sd.mp4  07最优间隔分类器问题.mp4
mv SAFD9L3B9_sd.mp4  08顺序最小优化算法.mp4
mv SAFD9VGEO_sd.mp4  09经验风险最小化.mp4
mv SAFDA37TS_sd.mp4  10特征选择.mp4
mv SAFDACJPD_sd.mp4  11贝叶斯统计正则化.mp4
mv SAFDAHG1C_sd.mp4  12K-means算法.mp4
mv SAFDAQ19J_sd.mp4  13高斯混合模型.mp4
mv SAFDB0UUS_sd.mp4  14主成分分析法.mp4
mv SAFDB7QLL_sd.mp4  15奇异值分解.mp4
mv SAFDBF188_sd.mp4  16马尔可夫决策过程.mp4
mv SAFDBM41T_sd.mp4  17离散与维数灾难.mp4
mv SAFDBTL6V_sd.mp4  18线性二次型调节控制.mp4
mv SAFDC4B84_sd.mp4  19微分动态规划.mp4
mv SAFDCDGNA_sd.mp4  20策略搜索.mp4

以上几个步骤就能完美的实现视频的下载。步骤比较多,但是还是很有成就感啊,程序员的逗逼方法。

几年前下载TED视频的脚本(全部用脚本来实现,其实拆分步骤或许是更好的选择简单些):

1
2
3
4
5
6
7
8
wget -qO- http://open.163.com/ted/ | iconv -f gbk -t utf-8 | awk '{if($0 ~ /<a href="http:\/\/v\.163\.com\/movie/ ){print}}' \  
 | sed -n 's/.*<a href="\([^"]*\)".*/\1/p' \  
 | while read url  
do   
        echo $url;  
        wget -qO- "$url" | iconv -f gbk -t utf-8 | awk '/appsrc: \047http:\/\//{if(match($0,/http:[^\047]*/))print substr($0,RSTART,RLENGTH);}' \  
 | sed -e s/-list\.m3u8/.mp4/ -e s/movie/movieMP4/  
done  

–END

Comments