忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 4454 | 回复: 5

LWP下载知乎答案中的视频 [复制链接]

论坛徽章:
11
子鼠
日期:2014-10-11 16:46:4815-16赛季CBA联赛之山东
日期:2017-11-10 14:32:142016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:532016科比退役纪念章
日期:2018-03-16 10:24:05
发表于 2018-05-15 17:48 |显示全部楼层
首发:https://zhuanlan.zhihu.com/p/36865994

视频示例:https://www.zhihu.com/question/271736973/answer/389377346

其中 use Modern::Perl; 不是必需的。

  1. =info
  2.     Author: 523066680
  3.     Date: 2018-05
  4. =cut

  5. use Modern::Perl;
  6. use LWP::UserAgent;
  7. use File::Slurp;
  8. use JSON;
  9. STDOUT->autoflush(1);

  10. goto_dir("D:/temp");
  11. our $main = "https://lens.zhihu.com/api/videos/";
  12. our $ua = LWP::UserAgent->new(  );
  13. our $target = "https://www.zhihu.com/question/271736973/answer/389377346";

  14. my $res = $ua->get( $target );
  15. my $html = $res->content();
  16. my @video = $html=~/>https:.*?video\/(\d+)</g;
  17. my $oauth = get_oauth( $html );

  18. for my $idx ( 0 .. $#video )
  19. {
  20.     printf "Getting video %s - %s\n", $idx, $video[$idx];
  21.     my @vlinks = get_video_links(  $oauth, $video[$idx] );
  22.     get_video( @vlinks );
  23. }

  24. # 获取 m3u8 列表并提取链接
  25. sub get_video_links
  26. {
  27.     our ($main, $ua);
  28.     my ( $oauth, $pgcode ) = @_;

  29.     my $res = $ua->get(
  30.                 $main .$pgcode,
  31.                 "authorization" => $oauth,
  32.             );

  33.     die unless $res->is_success();

  34.     my $data = decode_json( $res->content );
  35.     my $play_url = $data->{playlist}->{sd}->{play_url};  # m3u8 url
  36.     my $pre_url;

  37.     # 获取网址共用部分
  38.     $play_url =~/(.*?\w{32})/;  
  39.     $pre_url = $1 ."/";

  40.     $res = $ua->get( $play_url );
  41.     my @vlinks = $res->content =~/\n(.*?\d+\.ts.*?)\n/g;
  42.     grep { $_ = $pre_url . $_ } @vlinks;

  43.     return $pgcode, @vlinks;
  44. }

  45. # 获取视频切片,合并
  46. sub get_video
  47. {
  48.     our $ua;
  49.     my $name = shift;
  50.     my $buff = "";
  51.     my $res;

  52.     while ( my $link = shift )
  53.     {
  54.         print $#_ + 1 ," ";
  55.         $res = $ua->get( $link );
  56.         $buff .= $res->content();
  57.     }
  58.     print "\n";

  59.     write_file( "${name}.ts", {binmode=>":raw"}, $buff );
  60. }

  61. sub get_oauth
  62. {
  63.     our ( $ua );
  64.     my $html = shift;
  65.     my ($js) = $html =~/(https:[^<>]+main\.app[^<>]+js)/g;
  66.     my $res = $ua->get( $js );
  67.     # pattern: authorization:"oauth c3cef7c66a1843f8b3a9e6a1e3160e20"}
  68.     my ($oauth) = $res->content =~/authorization:"([^"]{30,})"/;
  69.     return $oauth
  70. }

  71. sub goto_dir
  72. {
  73.     my $dir = shift;
  74.     mkdir $dir unless ( -e $dir );
  75.     chdir $dir;
  76. }

  77. __DATA__
复制代码


Perl 是不是过时我真的不关心,只用来做想做的事(工作和编程无关)。

论坛徽章:
0
发表于 2018-05-15 18:37 |显示全部楼层
感谢分享!

Perl是个能干活的骆驼,用起来很爽。

论坛徽章:
0
发表于 2018-06-15 19:31 |显示全部楼层
牛,可以做个爬虫

论坛徽章:
0
发表于 2018-06-15 19:31 |显示全部楼层
牛,可以做个爬虫

论坛徽章:
11
子鼠
日期:2014-10-11 16:46:4815-16赛季CBA联赛之山东
日期:2017-11-10 14:32:142016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:532016科比退役纪念章
日期:2018-03-16 10:24:05
发表于 2018-06-18 11:25 |显示全部楼层
本帖最后由 523066680 于 2018-06-18 20:06 编辑

回复 3# dahe_1984

写了tumblr的视频批量下载,不过需要账号登录,加上内容敏感,就没有分享~

论坛徽章:
0
发表于 2018-07-01 08:09 |显示全部楼层
谢楼主,学习下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

【重磅资料】多云网络实战的相关问题汇总!
云网融合的多云网络

本文介绍如何管理私有云数据中心,构建数据中心互联和混合云解决方案。对于OTT 网络架构的深入理解,基本上来源于SIGCOM 的白皮书和一些公开视频。

Overlay SDN 控制器详解

云计算为了适应业务/APP 的快速开发和部署,会把网络分为两层:Overlay 和 Underlay 网络。本文主要讲Overlay网络层面的问题。

超级核心路由器演进

2016 年,网络连接已经采用100G/200G/400G(虽然 400GE 接口技术还未成熟),互联网出口也已经增长到了 T 级别。

获得资料 >>
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP