如何从JavaScript中提取YouTube URL
How can I extract a YouTube URL from its JavaScript?
你好,我想知道我的脚本是否好;我想要完整的URL作为我的Perl脚本的结果:
#!/usr/bin/perl
use strict;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new( agent => 'Mozilla/5.0 (Windows NT 5.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1');
my $get = $ua->get('http://www.youtube.com/watch?v=Ko0c4QT5aVA')->content;
if ($get =~ m,(.*?)http:(.*?)'"')';'yt.preload.start'('"(.*?)'"')';</script>,sgi){
print "First:$2'n'n";
print "Second:$3'n";
我真的很欣赏Mojo::UserAgent内置的DOM功能。你可以提取出你想要的脚本(糟糕的是YouTube没有给它们附加id
):
use v5.10;
use Mojo::UserAgent;
my $script = Mojo::UserAgent->new->
get("http://www.youtube.com/watch?v=Ko0c4QT5aVA" )->
res->
dom->
find('script')->
[1];
my( $yt_preload_start ) = $script =~ m|;'s*yt'Q.preload.start('E's*"(.*?)"|;
$yt_preload_start =~ s{''(.)}{$1}g;
$yt_preload_start =~ s{u0026}{&}g;
say "URL is $yt_preload_start";
我更喜欢使用JavaScript解析器来提取yt.preload.start
的参数,但我没有这些方面的经验。
它更好吗?
#!/usr/bin/perl
use strict;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new( agent => 'Mozilla/5.0 (Windows NT 5.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1');
my $get = $ua->get('http://www.youtube.com/watch?v=Ko0c4QT5aVA')->content;
if ($get =~ m,(.*?)http:(.*?)'"')';'yt.preload.start'('"(.*?)'"')';</script>,sgi){
my $out = $3;
$out =~ s@''/@/@g;
$out =~ s@''u0026@'&@g;
print "$out'n";
}
从您的问题和代码中,我不清楚您试图从HTML中提取什么。特别是,为什么你在比赛的主要部分之前捕捉所有内容,然后忽略捕捉?
我的最佳猜测是,您希望所有URL thta都显示为yt.preload.start
JavaScript函数的参数。你可以这样做:
use strict;
use warnings;
use LWP::UserAgent;
use URI::Escape;
my $ua = LWP::UserAgent->new( agent => 'Mozilla/5.0 (Windows NT 5.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1');
my $html = $ua->get('http://www.youtube.com/watch?v=Ko0c4QT5aVA')->content;
my @urls = $html =~ /'Qyt.preload.start("'E(http[^"]+)/gi;
print map uri_unescape($_)."'n", @urls;
编辑:
此解决方案将URL保留为JavaScript Unicode字符"'u0026"
(与Perl "'N{N+0026}"
相同)或与符号"&"
。字符串也以"http:'/'/"
开头。纠正这些问题很简单。一种方法是用替换最终的map
print map {
my $ss = uri_unescape $_;
$ss =~ s/''u0026/&/g, $ss =~ s|''/|/|g;
$ss;
} @urls;
相关文章:
- 有可能过滤来自嵌入式YouTube的声音吗
- 在数据提取完成之前进行页面渲染
- 是否可以使用iframe API在iOS浏览器上播放youtube视频
- html5视频中的Youtube类型注释
- 如何在Javascript中从字符串中提取某些单词
- RegEx JavaScript:数字后的符号提取
- 如何在内联依赖项并将图像转换为dataURI的情况下完全提取网页
- 链接和youtube的Javascript和regex
- Regex提取URL返回数组的一部分;未定义”;
- 如何提取“;href"最近列表项中的属性值
- YouTube作为弹出窗口在桌面版本上播放,但不在移动设备上播放
- 使用javascript将视频从我的android应用程序上传到youtube
- 使用时刻.js从日期时间中提取时间
- 从我的频道中提取最后3个youtube视频
- 使用 YouTube 直播 API 设置提取设置
- Javascript 从 Youtube URL 中提取时间参数
- 从 YouTube 嵌入代码中提取视频 ID
- 如何从JavaScript中提取YouTube URL
- 从Javascript/Regex中的youtube链接中提取视频ID
- 使用jQuery从YouTube视频iFrame链接中提取ID