我有一个巨大的HTML,有很多我不需要的东西,但里面有以下格式提供的URL:
<a href="http://www.retailmenot.com/" class=l
我正在尝试提取网址...我尝试过,但无济于事:
open(FILE,"<","HTML.htm") or die "$!";
my @str = <FILE>;
my @matches = grep { m/a href="(.+?") class=l/ } @str
有关如何匹配的想法吗?
答案 0 :(得分:11)
使用HTML::SimpleLinkExtor,HTML::LinkExtor或其他一个提取Perl模块的链接。你根本不需要正则表达式。
这是一个简短的例子。你没有子类。您只需告诉%HTML::Tagset::linkElements
要收集哪些属性:
#!perl
use HTML::LinkExtor;
$HTML::Tagset::linkElements{'a'} = [ qw( href class ) ];
$p = HTML::LinkExtor->new;
$p->parse( do { local $/; <> } );
my @links = grep {
my( $tag, %hash ) = @$_;
no warnings 'uninitialized';
$hash{class} eq 'foo';
} $p->links;
如果您需要收集任何其他代码的网址,请进行类似的调整。
如果你想要一个回调程序,那也不是那么难。您可以在解析器遇到链接时观察链接:
use HTML::LinkExtor;
$HTML::Tagset::linkElements{'a'} = [ qw( href class ) ];
my @links;
my $callback = sub {
my( $tag, %hash ) = @_;
no warnings 'uninitialized';
push @links, $hash{href} if $hash{class} eq 'foo';
};
my $p = HTML::LinkExtor->new( $callback );
$p->parse( do { local $/; <DATA> } );