Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 使用Perl';使用语法分析器从标记中提取URL_Html_Perl_Parsing_Href - Fatal编程技术网

Html 使用Perl';使用语法分析器从标记中提取URL

Html 使用Perl';使用语法分析器从标记中提取URL,html,perl,parsing,href,Html,Perl,Parsing,Href,我试图解析HTML文档并提取URL,但无法确定如何获取“a”标记的href值。如果有帮助,我将查阅此文档: 问题在第三个“elsif”代码块内 sub findTokens { my $htmlFileName = $_[0]; my $pagesDir = $_[1]; my %titles = %{$_[2]}; my %mapping = %{$_[3]}; my @outLinks; my $p = HTML::TokeParser->new("$pagesDir$htmlFil

我试图解析HTML文档并提取URL,但无法确定如何获取“a”标记的href值。如果有帮助,我将查阅此文档:

问题在第三个“elsif”代码块内

sub findTokens {
my $htmlFileName = $_[0];
my $pagesDir = $_[1];
my %titles = %{$_[2]};
my %mapping = %{$_[3]};
my @outLinks;

my $p = HTML::TokeParser->new("$pagesDir$htmlFileName") 
    or die("Can't open $htmlFileName: \n");
my @tokens;
my $url = $mapping{$htmlFileName};

while (my $newChunk = $p->get_token) {

        if ($newChunk->[0] eq 'T') {
            my @lineArray = split(' ', $newChunk->[1]);
            foreach my $i (@lineArray) {
                if ( lc($i) =~ /^[a-z]*\-?\'?s?$/) {
                    push(@tokens, lc($i));
                }
            }
        } elsif ($newChunk->[0] eq 'S') {
            if ($newChunk->[1] eq 'title') {
                $newChunk = $p->get_token;
                    $titles{$url} = $newChunk->[1];
                    #print $url;
                    #print $titles{$url};
            }
        } elsif ($newChunk->[0] eq 'S') {
            if ($newChunk->[1] eq 'a') {

                my %attr = %{$newChunk->[2]};
                push(@outLinks, $attr{'href'});
            }
        }
}

return (\@tokens, \%titles, \@outLinks);

}

IMHO,
HTML::
代表了古老的学校

因为我知道
HTML::TreeBuilder::XPath
,所以我不能回到旧版本

你的帖子上的例子:

#!/usr/bin/env perl

use strict; use warnings;

use WWW::Mechanize;
use HTML::TreeBuilder::XPath;

my $m = WWW::Mechanize->new( autocheck => 1 );
$m->get("http://stackoverflow.com/q/13790575/465183");

my $tree = HTML::TreeBuilder::XPath->new_from_content( $m->content );

print join "\n", $tree->findvalues( './/a/@href' );

请参见

如果您发布了“J/K修复了它,LOL,我喜欢含糊不清的文档”作为答案,我现在投票关闭此文档,因为它太本地化了。如果您要有指向Perl模块的链接,请使用或链接。(如果是Perl附带的,甚至可以使用链接。)更像是懒惰学校(不是说懒惰一定是坏事…)。这个解析器将以更少的运行时间和更少的内存使用率为您提供答案。HTBX将用更少的代码得到答案。@sputnick:HTBX=HTML::TreeBuilder::XPath