继吉 发表于 2018-8-31 07:05:51

perl 爬ku6视频

# cat new_hash_ku6.pl  
#!/usr/bin/perl
  
use strict;
  
use warnings;
  
use LWP::Simple;
  
use HTML::TreeBuilder;
  
use JSON qw(decode_json);
  
my $html = get ("http://www.ku6.com");
  
my $root = HTML::TreeBuilder->new_from_content($html);
  
my %images = ();
  
my @urls;
  
my $sub_html;
  
my $sub_root;
  
my %urls;
  
my @sub_urls;
  
foreach my $node ($root->find_by_tag_name('a')){
  
$images{$node->attr('href')}++;
  
}
  
foreach my $pic (sort keys %images){
  
if ( ($pic =~/http:\/\/v\.ku6\.com.*/s) &&($pic =~ m{/show/})){
  
push(@urls, $pic);
  
$urls{$pic}++;
  
}
  
}
  
上面代码是把ku6首页的视频连接都抓出来;
  
子程序get_sub_url 是逐个请求视频连接,顺便把每打开一个视频网页,那页上面的推广视频连接也抓下来保存到数组;
  
sub get_url {
  
foreach my $url (@urls){
  
$sub_html = get ($url);
  
$sub_root = HTML::TreeBuilder->new_from_content($sub_html);
  
my %href = ();
  
for my $sub_node ($sub_root->find_by_tag_name('a')){
  
$href{$sub_node->attr('href')}++;
  
}
  

  
for my $sub_pic (sort keys %href){
  
if (($sub_pic =~ /http:\/\/v\.ku6\.com.*/s) &&($sub_pic =~ m{/show/})){
  
if (exists $urls{$sub_pic}){next;}
  
else { push(@sub_urls,$sub_pic) };
  
}
  
}
  
get_mail_url(@sub_urls);
  
}
  
}
  
子程序get_mail_url 是模拟用户去访问ku6的调度服务器,下载视频内容;
  
这样就相当于主动把ku6的热点文件下载到缓存服务器,复用了,凌晨的空闲
  
带宽
  
sub get_mail_url {
  
foreach my $get_mail (@sub_urls){
  
my $url_mail ="$get_mail";
  
my $lwp =
  
new LWP::UserAgent( agent =>
  
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; CIBA)'
  
);
  
my $request = HTTP::Request->new( GET => $url_mail );
  
$lwp->max_redirect;
  
$request->header( Accept => 'text/html' );
  
my $response = $lwp->request($request);
  
my $html = $response->decoded_content;
  
my ($flv_download_link) = ( $html=~ /"f":"([^\"]+)"/s );
  
my $json = '{ "url":"' . $flv_download_link. '"}';
  
$flv_download_link = decode_json($json)->{url};
  
system("wget $flv_download_link -O /dev/null");
  
}
  
}
  
get_url (@urls);


页: [1]
查看完整版本: perl 爬ku6视频