WWW :: Механизация и итерация - PullRequest
1 голос
/ 12 марта 2012

Я пытаюсь собрать информацию из http://www.soccerbase.com/tournaments/tournament.sd?comp_id=1 из строк с 1184 по 1325, в основном предстоящие игры на следующие 7 дней.у меня есть код, работающий для одного экземпляра, но я не могу понять, как выполнить итерацию кода так, чтобы он собирал всю информацию об играх, пока не достигнет конца игр за 7 дней.Есть ли какой-то цикл, который я могу создать, который будет очищать, пока я не нажму на определенный тег или что-то?Вот мой код, спасибо заранее!

my $page = WWW::Mechanize->new;

$page->get('http://www.soccerbase.com/tournaments/tournament.sd?comp_id=1');

my $stream = HTML::TokeParser->new(\$page->{content});
my @fixture;
my $tag = $stream->get_tag("td");
while($tag->[1]{class} ne "dateTime"){
    $tag = $stream->get_tag("td");   
}

if ($tag->[1]{class} eq "dateTime") {
    push(@fixture, $stream->get_trimmed_text("/a"));
}

$stream->get_tag("a");
$stream->get_tag("a");
push(@fixture, $stream->get_trimmed_text("/a"));

$stream->get_tag("a");
push(@fixture, $stream->get_trimmed_text("/a"));  

foreach $element (@fixture){
print $element, "\t";
}
print "\n";  

1 Ответ

3 голосов
/ 12 марта 2012

Попробуйте Web :: Query для разбора HTML, использовать его гораздо удобнее, чем TokeParser.Он работает декларативно, а не императивно, и вы выбираете элементы с помощью выражений CSS.

Если есть оценка v, добавьте строку в набор результатов, иначе откажитесь от строки.*

$VAR1 = [
    ['tn7gc635476', '', ' Mo 12Mar 2012 ', 'Arsenal',   'v', 'Newcastle', '  '],
    ['tn7gc649937', '', ' Tu 13Mar 2012 ', 'Liverpool', 'v', 'Everton',   '  '],
    ['tn7gc635681', '', ' Sa 17Mar 2012 ', 'Fulham',    'v', 'Swansea',   '  '],
    ['tn7gc635661', '', ' Sa 17Mar 2012 ', 'Wigan',     'v', 'West Brom', '  '],
    ['tn7gc635749', '', ' Su 18Mar 2012 ', 'Wolves',    'v', 'Man Utd',   '  '],
    ['tn7gc635556', '', ' Su 18Mar 2012 ', 'Newcastle', 'v', 'Norwich',   '  ']
];
...