Я хочу разобрать сайт в структуру данных Perl.
Сначала я загружаю страницу с
use LWP::Simple;
my $html = get("http://f.oo");
Теперь я знаю два способа справиться с этим.
Сначала регулярные выражения и вторые модули.
Я начал с чтения HTML :: Parser и нашел несколько примеров.
Но я не настолько уверен в знании Perl.
Мой пример кода продолжается
my @links;
my $p = HTML::Parser->new();
$p->handler(start => \&start_handler,"tagname,attr,self");
$p->parse($html);
foreach my $link(@links){
print "Linktext: ",$link->[1],"\tURL: ",$link->[0],"\n";
}
sub start_handler{
return if(shift ne 'a');
my ($class) = shift->{href};
my $self = shift;
my $text;
$self->handler(text => sub{$text = shift;},"dtext");
$self->handler(end => sub{push(@links,[$class,$text]) if(shift eq 'a')},"tagname");
}
Я не понимаю, почему сдвиг два раза. Секундом должен быть сам указатель. Но первое заставляет меня думать, что ссылка на себя уже сдвинута, используется как хэш, а значение для href хранится в $class
. Может ли кто-нибудь объяснить эту строку (my ($class) = shift->{href};
)?
Помимо этого, я не хочу анализировать все URL, я хочу поместить весь код между <div class ="foo">
и </div>
в строку, где много кода, особенно другие теги <div></div>
. Так что я или модуль должен найти правильный конец.
После этого я планировал снова просмотреть строку, чтобы найти специальные классы, такие как <h1>,<h2>, <p class ="foo2"></p>
и т. Д.
Я надеюсь, что эта информация поможет вам дать мне несколько полезных советов, и, пожалуйста, имейте в виду, что прежде всего я хочу простой способ понимания, который не должен быть отличным показателем на первом уровне!