perl 爬ku6视频
发布时间:2020-12-16 00:09:21 所属栏目:大数据 来源:网络整理
导读:? ?起因是自己想在公司做ku6视频缓存增加点工作经验(领导非常支持,找了7台720XD,有个好领导还是很幸福的),后来因为白天回源紧张,就停止计划了;某天突然想到那些视频公司都是主动推送热点文件到服务器,要是我自己凌晨回源同步热点,减少白天热点文件回
? ?起因是自己想在公司做ku6视频缓存增加点工作经验(领导非常支持,找了7台720XD,有个好领导还是很幸福的),后来因为白天回源紧张,就停止计划了;某天突然想到那些视频公司都是主动推送热点文件到服务器,要是我自己凌晨回源同步热点,减少白天热点文件回源,那我视频缓存项目还可以继续推进; 个人是perl新手,下面代码有些是朋友帮忙写的(有好朋友也幸福...要不然自己要研究到啥时候),我自己写了点再把各部分功能组合起来;虽然跑的慢点,但有效果,也能接受; 这算写过最长的代码了。。。 [root@web-40 perl]# 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); 下一步就是,让CDN跑一周以上,根据日志,分析用户主要看哪类视频,重点爬这些视频; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |