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】来获取视频的下载地址:
- 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());})
|
- 使用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
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