2012-03-12 11 views
1

私はから1184番から1325番までの情報を削り取ろうとしています。基本的には今後7日間の予定です。私はコードが1つのインスタンスのために働いているが、私はそれが7日間のゲームの終わりに達するまで、すべてのゲーム情報を掻き集めるようにコードを反復する方法を理解することはできません。私は特定のタグや何かを打つまで、私は作ることができるループのいくつかの並べ替えはありますか?ここまで私のコードは、ありがとうございます!WWW :: Mechanize and iteration

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

TokeParserより使用がはるかに進歩して、HTMLを解析するためWeb::Queryを試してみてください。それは命令的ではなく宣言的に機能し、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

+1

[新しい質問を開く](http://stackoverflow.com/questions/ask)を参照してください。 – daxim

+0

私はそうしました! – blacky

関連する問題