2012-03-12 111 views
1

我想從第1184到1325行的http://www.soccerbase.com/tournaments/tournament.sd?comp_id=1中抓取信息,基本上是未來7天即將到來的遊戲。我的代碼只針對一個實例工作,但我無法弄清楚如何迭代代碼,以便它能夠清除所有遊戲信息,直到它達到7天的遊戲價值。是否有某種形式的循環,我可以創建,將刮,直到我打到某個標籤或什麼?這是我的代碼迄今爲止,在此先感謝!WWW ::機械化和迭代

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"; 

回答

3

嘗試Web::Query解析HTML,它是一個好得多比TokeParser使用。它的工作原理是聲明式的,而不是命令式的,你可以用CSS表達式選擇元素

如果得分爲v,則將該行添加到結果集中,否則放棄該行。

use Web::Query 'wq'; 
my $football_matches = wq($mech->content) 
    ->find('tr.match') 
    ->map(sub { 
     my (undef, $e) = @_; 
     return 'v' eq $e->find('td.score')->text 
      ? [ 
       $e->attr('id'), 
       map { $e->find("td.$_")->text } 
        (qw(tournament dateTime homeTeam score awayTeam prices)) 
      ] 
      :(); 
    }); 
use Data::Dumper; print Dumper $football_matches; 

$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', ' '] 
]; 
+0

非常感謝,這個完美的作品。還有一個問題,如果你不介意,我將如何從上述結構中提取團隊名稱和日期,以將它們放在正常的字符串變量中?再次感謝! – blacky 2012-03-13 19:26:30

+1

[打開一個新問題](http://stackoverflow.com/questions/ask)。 – daxim 2012-03-13 19:35:51

+0

好的,我已經這麼做了! – blacky 2012-03-13 20:53:21