2012-04-06 17 views
0

私は、特定のタグからテキストを取得したいという条件がありますが、trueを返しているようではありません。この条件が機能しないのはなぜですか? Divとクラス

#!/usr/bin/perl 

use HTML::TreeBuilder; 
use warnings; 
use strict; 
my $URL = "http://prospectus.ulster.ac.uk/modules/index/index/selCampus/JN/selProgramme/2132/hModuleCode/COM137"; 
my $tree = HTML::TreeBuilder->new_from_content($URL); 

if (my $div = $tree->look_down(_tag => "div ", class => "col col60 moduledetail")) { 
printf $div->as_text(); 
      print "test"; 
open (FILE, '>mytest.txt'); 
print FILE $div; 
close (FILE); 
} 
     print $tree->look_down(_tag => "th", class => "moduleCode")->as_text(); 
$tree->delete(); 

それは、if文になっていないと、if文の外の印刷が未定義の値があることを言っているが、私はこれらのタグが存在しないので、それは真を返すべきであることを知っています。

<th class="moduleCode">COM137<small>CRN: 33413</small></th> 

おかげ

+0

@downvoter:この質問には何が間違っていますか? – Borodin

答えて

3

あなたはHTML::TreeBuilder->new_from_contentを呼び出している、まだあなたが代わりにコンテンツのURLを供給しています。 HTML::TreeBuilderに渡す前に、HTMLをgetにする必要があります。

おそらく最も簡単な方法は、getというサブルーチンをインポートするLWP::Simpleを使用することです。これにより、URLのデータが読み込まれ、文字列として返されます。

条件ブロックが実行されない理由は、タグ名にスペースがあるためです。 "div "の代わりに"div"が必要です。

はまた、次の点に注意してください。

  • あなたべきではない出力書式指定子としてその文字列でprintfを使用して、単一の文字列。 の引数がありません。警告が出力され、文字列を正しく出力できません。

  • 理想的には、字句ファイルハンドルと3つの引数を持つ形式のopenを使用することをお勧めします。また、すべてのopenコールのステータスを確認し、それに応じて応答する必要があります。

  • スカラー変数$divは、祝福されたハッシュリファレンスであるため、そのまま印刷すると、HTML::Element=HASH(0xfffffff)のように出力されます。あなたは私はあなたが欲しいものを言うことができないように私が出力をフォーマットしていないが、これらのエラーは、あなたのコードは次のようになります修正して

を表示したい値を抽出するために、そのメソッドを呼び出す必要があります。

use strict; 
use warnings; 

use HTML::TreeBuilder; 
use LWP::Simple; 

my $url = "http://prospectus.ulster.ac.uk/modules/index/index/selCampus/JN/selProgramme/2132/hModuleCode/COM137"; 
my $html = get $url; 
my $tree = HTML::TreeBuilder->new_from_content($html); 

if (my $div = $tree->look_down(_tag => "div", class => "col col60 moduledetail")) { 
    print $div->as_text(), "\n"; 
    open my $fh, '>', 'mytest.txt' or die "Unable to open output file: $!"; 
    print $fh $div->as_text, "\n"; 
} 

print $tree->look_down(_tag => "th", class => "moduleCode")->as_text, "\n"; 
関連する問題