如何从国内视频网站中批量下载视频到本地?

33
1 Star2 Stars3 Stars4 Stars5 Stars (1 votes)
Loading...

青小蛙之前遇到了一个问题,要下载一部动画片以方便在没有网络的时候观看。找遍全网,发现在 cntv 有提供完整的视频,并且可以免费播放,于是拿出大神器  youtube-dl 工具下载的时候又发现,想要一次性下载 100 多集的内容,用手动的方法有些不科学,怎么办?

嗯,其实有了 youtube-dl,下载是非常非常简单的,只需要使用命令行:

youtube-dl http://tv.cntv.cn/video/VSET100333776130/xxxx

就能将视频文件下载下来了。但是,就像上面这个网站,除了每页的 12 个视频地址外,还有… 10 个翻页

在这里感谢 @大鱼老师 帮忙搞定的 118 集全链接。

其实青小蛙首先想到的是使用正则表达式来过滤这些 URL,但在尝试的时候发现,正则这种东西长时间不用居然…居然会忘干净!折腾了很久放弃。

在 tg 好友 @Yagami 的提醒下:「有个在线工具 extract url from text」,青小蛙茅塞顿开,继续折腾。

首先,尝试自己提取链接,总麻烦鱼老师也不是办法。从网页源代码中找到视频部分,然后稍微处理一下:

将相对地址替换为绝对地址后,我们就有了粗滤的、包含视频链接的 HTML 代码。

(这里需要手动翻页 10 次,不知道有没有更好的办法)

然后,青小蛙搜索了到了两款国内可以用的从文本中提取链接的在线工具:

其中第一款还有过滤功能,更强大一些,青小蛙这次就用这个了。

将代码复制进去,URL Extractor For Web Pages and Text 还支持从文件导入,如果有比较大量的内容需要转换的话。

然后跳过第 2 步,点击 Extract,所有的链接就排列好了,去除不需要的链接,保存为 .txt 文件,完成获取链接的任务。

其实,展开第 2 步,是可以直接过滤需要的链接的,在 Only show URLs of these social media sites:  里输入 cntv.cn 就可以了。不过这里默认获得的地址非常规整,也就无所谓了。

最后,使用 youtube-dl 批量下载:

youtube-dl -c -i -a cntv.txt

解释一下:

  • -c 断点续传
  • -i 跳过错误继续下载
  • -a cntv.txt 从这个 txt 文件中获取 URLs 进行批量下载

根据网络条件,需要一段时间下载。

下载完成后,去文件夹看一下下载情况,可能会有部分下载失败,这是只需要挑选出来重新下载就可以了。

嗯,不说了,青小蛙去看动画片了。

已有 33 条评论, 我要留言

  1. rocky说道:

    好棒。
    ———-

  2. allen0826说道:

    看懵逼了 也太复杂了

    • 浮舟说道:

      不复杂。就是依赖在线分析工具,把链接提取出来,批量down。。。。

  3. 子衿说道:

    小青蛙,我想从文章开头开始打击你。

    “青小蛙之前遇到了一个问题,要下载一部动画片以方便在没有网络的时候观看。找遍全网,发现在 cntv 有提供完整的视频,并且可以免费播放,于是拿出大神器 youtube-dl 工具下载的时候又发现,想要一次性下载 100 多集的内容,用手动的方法有些不科学,怎么办?”

    |–为何不多搜索一下呢?
    |–火车宝宝第一季动画:http://pan.baidu.com/s/1dD9rO3J 密码:zrtm
    |–火车宝宝第二季动画:http://pan.baidu.com/s/1ntFhjvz 密码:sydd
    |–压缩文件解压密码为无猜网址:www.lxwc.com.cn

    (虽然我知道你发这篇文章是想介绍youget / youtube-dl这种下载方式,23333)

  4. test说道:

    这个好,不过我喜欢用 you-get 下载

  5. pks说道:

    var str = ”;
    (function episodeToString() {
    pager3.doPage(‘1’);
    while (/pager3/.test(document.querySelector(‘#page .btn_next’).href)) {
    var episodes = document.querySelectorAll(‘#fpy_ind04 dd .text a’);
    for (var i = 0;i< episodes.length;i++) {
    str += episodes[i].href + "\n";
    }
    document.querySelector('#page .btn_next').click();
    }
    })();
    console.log(str);

    打开浏览器调试工具 – 控制台,复制上面的脚本运行一下就行了

  6. pks说道:

    又仔细看了下原来数据就在页面里啊,那就更简单了
    var str = ”;
    for (var item of jsonData2) {
    str += item.url + “\n”;
    }
    console.log(str);

  7. allor说道:

    也可以用 autopagerize 之类的自动翻页插件把所有页面加载了再一次性提取链接。
    有时懒得折腾时我就是这样在网上抓图的……

    注:提取链接可以在控制台里获取document.links再过滤。

  8. ziloxiju说道:

    you-get 原来可以正常下载 youku 视频,现在不行了,下了很多都不行,试了 N 天,崩溃……

  9. Anonym说道:

    Batch Link Downloader
    https://chrome.google.com/webstore/detail/batch-link-downloader/aiahkbnnpafepcgnhhecilboebmmolnn

    下面这个民间改进的版本,按住“Shift”同时点击“Copy”按钮就能够将选中的链接以空格符连接起来后复制到剪贴板。
    https://pan.baidu.com/s/1dhBioe

  10. 杍墨说道:

    膜拜各位大师

  11. Fom说道:

    菜鸟求科普!txt 文件不需要指定路径?为什么我用 you-get却不成功呢?求 you-get 的类似方法 pls

    • Fom说道:

      如果用 youtube-dl 的这方法下载哔哩哔哩,会提示错误
      ERROR: Unable to download webpage: nonnumeric port: ” (caused by InvalidURL(u”nonnumeric port: ‘\x00′”,))

    • Fom说道:

      太好了,原来 you-get 也可以,用-h 就可以看到命令怎样用了,我用这个:
      you-get –no-caption(不下载字幕) –input-file “(txt文件路径)” -o “(输出文件路径)”
      至于 txt 文档的链接,是inoreader 里筛选过后在浏览器打开用Anonym提到的Batch Link Downloader获取。再用快捷键(Alfred 之类)一键导入手机的话。。哈哈!虽然有无线流量卡,但这个更爽!省事!

      • Fom说道:

        还是不行,只会重复下载第一个链接,虽然下载的文件名是各链接的标题。求方法。

  12. Tesla说道:

    http://tv.cctv.com/2017/03/24/VIDAOVn1JjNGq65q8hRMXQEx170324.shtml
    页面任意空白处,查看源代码。直接有118集的链接。

  13. damian说道:

    你们搞得这么高端 批量这种不是有硕鼠?

  14. 大象说道:

    对!硕鼠硕鼠!当年给我家小仔仔批量动画片全靠它了

  15. 无敌小金刚说道:

    我想下载台湾大学几个老师的开放式课程,一直没有办法

  16. Fom说道:

    同样的目的用 you-get到底怎样才行?弄成 txt 文件后用-i 能读取文件信息但下载就会重复下载第一个链接的文件,加上-l 更是提示“reading playlist from a file is unsupported and won’t make your life easier”,作者是不让批量下载么??

有不同想法?说说看