批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

[原创代码] [Perl]P站视频下载

P站大家懂的  

用到的模块:
JE (Javascript解析库)
Mojolicious (网络)

使用方法,将指定视频网址末尾15位的keyword复制放到 @list 数组中。以及找到Agent的地址更新到proxy设置
  1. use utf8;
  2. use Encode;
  3. use JE;
  4. use Modern::Perl;
  5. use File::Slurp;
  6. use Mojo::UserAgent;
  7. use Win32::Unicode::File;
  8. use JSON qw/from_json to_json/;
  9. STDOUT->autoflush(1);
  10. my $JE = new JE;
  11. my $ua = Mojo::UserAgent->new();
  12. init_ua();
  13. my %headers;
  14. init_headers(\%headers);
  15. # 这里放准备下载的 keyword 清单
  16. my @list = qw/
  17. ph60e6662d3221e
  18. ph5dc9ba7f1b...
  19. /;
  20. grep { getVideo($_) } @list;
  21. sub getVideo
  22. {
  23.     my $viewkey = shift;
  24.     my $url = "https://cn.pornhub.com/view_video.php?viewkey=${viewkey}";
  25.     my $res = $ua->get( $url )->result;
  26.     #print $html->body;
  27.     my $js = $res->dom->at(".video-wrapper script")->all_text;
  28.     my $id = $res->dom->at("#player")->attr("data-video-id");
  29.     my $title = $res->dom->at("title")->text; #unicode
  30.     $title =~s/\s+- Pornhub\.com//i;
  31.     $title =~s/[\\\/:*?"<>|]/ /g; #替换部分windows文件名不支持的字符
  32.     printf "%s %s\n", $id, gbk($title);
  33.     my $file = "E:/迅雷下载/${viewkey} ${title}.mp4";
  34.     if ( file_type( 'e' => $file ) ) {
  35.         printf "%s: file already exists\n", $viewkey;
  36.         return;
  37.     }
  38.     write_file("src.js", $js);
  39.     $JE->eval( $js );
  40.     my $x = $JE->value;
  41.     # 第三个节点对应 720P,->value 转换为Perl字符串
  42.     my $videolink = $x->{"qualityItems_${id}"}[2]{"url"}->value;
  43.     say $videolink;
  44.     my $tx = $ua->get( $videolink );
  45.     print $tx->error ? "\nDownloading failed: ".$tx->error->{message} : "\nDownloading finished!\n";
  46.     my $fh = Win32::Unicode::File->new("wb", $file);
  47.     $fh->write( $tx->result->body );
  48.     $fh->close();
  49. }
  50. sub init_headers
  51. {
  52.     my $ref = shift;
  53.     %$ref =  
  54.     (
  55.     'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng',
  56.     'accept-encoding' => 'gzip, deflate, br',
  57.     'accept-language' => 'zh-CN,zh;q=0.9,zh-TW;q=0.8',
  58.     'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',
  59.     );
  60. }
  61. sub init_ua
  62. {
  63.     $ua = $ua->max_redirects(5);
  64.     $ua = $ua->connect_timeout(10);
  65.     # Proxy server to use for HTTPS and WebSocket requests.
  66.     # https://docs.mojolicious.org/Mojo/UserAgent/Proxy#https
  67.     $ua->proxy->https("http://sri:secret\@127.0.0.1:10809")->http("http://sri:secret\@127.0.0.1:10809");
  68.     # 代理的具体地址,在代理工具设置、菜单中寻找
  69.     # 进度显示
  70.     $ua->on(start => sub {
  71.         my ($ua, $tx) = @_;
  72.         $tx->req->once(finish => sub {
  73.             $tx->res->on(progress => sub {
  74.                 state $prev = 0;
  75.                 my $msg = shift;
  76.                 return unless my $len = $msg->headers->content_length;
  77.                 my $size = $msg->content->progress;
  78.                 my $progress = int($size / ($len / 100));
  79.                 if ( $progress ne $prev ) {
  80.                     printf "%d%%\t", $progress;
  81.                 }
  82.                 $prev = $progress;
  83.             });
  84.         });
  85.     });
  86. }
  87. sub gbk { encode('gbk', $_[0]) }
  88. sub utf8 { encode('utf8', $_[0]) }
  89. sub u2gbk { encode('gbk', decode('utf8', $_[0])) }
  90. sub uni { decode('utf8', $_[0]) }
复制代码
2

评分人数

FuniCode 编程论坛
支付宝收款码:

B站视频怎么搞.

TOP

本帖最后由 523066680 于 2021-10-10 17:42 编辑

回复 2# slimay

    B站没试过,之前用手机保存本地(格式好像要手动改一下,音频也是独立的),从手机复制出来

油猴好像有现成脚本
https://greasyfork.org/zh-CN/scripts/413228-bilibili视频下载
FuniCode 编程论坛
支付宝收款码:

TOP

回复 2# slimay


    安卓缓存目录,拿ffmpeg合并一下音视频流就可以了
老刘的博客:https://OldLiu.CnBlogs.com/

TOP

回复 4# 老刘1号
老刘, 你多会成了音视频专业户了, 厉害啊

TOP

回复 3# 523066680


脚本不错

TOP

回复 6# slimay

     小小脚本,拿来冒泡,不足挂齿
FuniCode 编程论坛
支付宝收款码:

TOP

回复 7# 523066680
外贸赚钱吗

TOP

本帖最后由 523066680 于 2021-10-11 15:46 编辑

回复 8# slimay

     外贸赚钱,我不赚钱
跑题跑远了。

众所周知P站是一个学习网站,大胆补一张P站的截图
FuniCode 编程论坛
支付宝收款码:

TOP

返回列表