<menu id="4oq46"><strong id="4oq46"></strong></menu>
  • <menu id="4oq46"><menu id="4oq46"></menu></menu><input id="4oq46"><tt id="4oq46"></tt></input>
  • <tt id="4oq46"><strong id="4oq46"></strong></tt>
    <menu id="4oq46"><strong id="4oq46"></strong></menu>
      免費注冊 查看新帖 |

    Chinaunix

      平臺 論壇 博客 文庫
    最近訪問板塊 發新帖
    查看: 97874 | 回復: 8
    打印 上一主題 下一主題

    LWP下載知乎答案中的視頻 [復制鏈接]

    論壇徽章:
    12
    子鼠
日期:2014-10-11 16:46:482016科比退役紀念章
日期:2018-03-16 10:24:0515-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:5315-16賽季CBA聯賽之北京
日期:2019-08-13 17:30:53
    跳轉到指定樓層
    1 [收藏(0)] [報告]
    發表于 2018-05-15 17:48 |只看該作者 |倒序瀏覽
    本帖最后由 523066680 于 2018-10-16 15:36 編輯

    首發: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 是不是過時我真的不關心,只用來做想做的事(工作和編程無關)。

    2018-10 更新,7樓

    論壇徽章:
    0
    2 [報告]
    發表于 2018-05-15 18:37 |只看該作者
    感谢分享!

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

    論壇徽章:
    0
    3 [報告]
    發表于 2018-06-15 19:31 |只看該作者
    牛,可以做個爬蟲

    論壇徽章:
    0
    4 [報告]
    發表于 2018-06-15 19:31 |只看該作者
    牛,可以做個爬蟲

    論壇徽章:
    12
    子鼠
日期:2014-10-11 16:46:482016科比退役紀念章
日期:2018-03-16 10:24:0515-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:5315-16賽季CBA聯賽之北京
日期:2019-08-13 17:30:53
    5 [報告]
    發表于 2018-06-18 11:25 |只看該作者
    本帖最后由 523066680 于 2018-06-18 20:06 編輯

    回復 3# dahe_1984

    寫了tumblr的視頻批量下載,不過需要賬號登錄,加上內容敏感,就沒有分享~

    論壇徽章:
    0
    6 [報告]
    發表于 2018-07-01 08:09 |只看該作者
    謝樓主,學習下!

    論壇徽章:
    12
    子鼠
日期:2014-10-11 16:46:482016科比退役紀念章
日期:2018-03-16 10:24:0515-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:5315-16賽季CBA聯賽之北京
日期:2019-08-13 17:30:53
    7 [報告]
    發表于 2018-10-16 15:35 |只看該作者
    更新一下,現在知乎簡化了,不用oauth,也不用多個ts文件拼接,直接單個MP4

    代碼保存為 UTF8 編碼格式


    1. =info
    2.     Author: 523066680
    3.     2018-07 知乎去掉了 oauth 授權方式
    4.     2018-10 從 ts 多文件,變更為 mp4 單文件下載
    5. =cut

    6. use JSON;
    7. use Encode qw/from_to/;
    8. use LWP::UserAgent;
    9. use Mojo::DOM;
    10. use File::Slurp;
    11. STDOUT->autoflush(1);

    12. our $wdir = "D:/temp";
    13. our $main = "https://lens.zhihu.com/api/videos/";
    14. our $ua = LWP::UserAgent->new();
    15. our $target = "https://www.zhihu.com/question/271736973/answer/389377346";
    16. #our $target = "https://www.zhihu.com/question/285103979/answer/492401516";
    17. #our $target = "https://www.zhihu.com/question/278030511/answer/452274063";

    18. my $res = $ua->get( $target );
    19. my $html = $res->content();
    20. my @video = $html=~/>https:.*?video\/(\d+)</g;  # 獲取視頻頁面鏈接
    21. my $title = get_title_name( $html );
    22. my ($answerID) = ($target=~/\/(\d+)$/);

    23. mkdir $wdir unless -e $wdir;
    24. chdir $wdir;

    25. for my $idx ( 0 .. $#video )
    26. {
    27.     printf "Getting video %s - %s\n", $idx, $video[$idx];
    28.     get_video( $video[$idx], "${title}Answer_${answerID}_${idx}.mp4" );
    29. }

    30. sub get_video
    31. {
    32.     our ($main, $ua);
    33.     my ( $pgcode, $fname ) = @_;

    34.     my $res = $ua->get( $main .$pgcode );
    35.     die unless $res->is_success();

    36.     my $data = decode_json( $res->content );
    37.     my $play_url = $data->{playlist}->{sd}->{play_url};

    38.     $res = $ua->get( $play_url );
    39.     write_file( $fname, {binmode=>":raw"}, $res->content );
    40. }

    41. sub get_title_name
    42. {
    43.     my $html = shift;
    44.     my $dom = Mojo::DOM->new($html);
    45.     my $title = $dom->at("title")->text;
    46.     $title =~s/ - 知乎//;
    47.     from_to( $title, "utf8", "gbk" );
    48.     return $title;
    49. }

    復制代碼

    論壇徽章:
    0
    8 [報告]
    發表于 2019-03-13 16:44 |只看該作者
    路過看看啦啦啦啦

    論壇徽章:
    0
    9 [報告]
    發表于 2019-03-29 22:05 |只看該作者
    看不懂,學習中。
    您需要登錄后才可以回帖 登錄 | 注冊

    本版積分規則 發表回復

      

    北京盛拓優訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年舉報專區
    中國互聯網協會會員  聯系我們:huangweiwei@itpub.net
    感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP
       日韩综合区视频第一页导航,无码JK粉嫩小泬在线观看,午夜精品A片一区二区三区,日日躁夜夜躁狠狠躁麻豆,大胆国模,免费观看无遮挡www的网站