0

特定のタグからテキストを取得したいという条件がありますが、trueが返されないようです。

#!/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ステートメントの外側の出力には未定義の値があると書かれていませんが、これらのタグが存在するため、trueを返す必要があることはわかっています。

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

ありがとう

4

1 に答える 1

3

あなたはHTML::TreeBuilder->new_from_contentまだ電話をかけていますが、コンテンツの代わりにURLを提供しています。getHTMLをに渡す前に、HTMLを使用する必要がありますHTML::TreeBuilder

おそらく最も簡単な方法は、と呼ばれるサブルーチンをインポートするLWP::Simplegetを使用することです。これにより、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";
于 2012-04-06T14:10:05.023 に答える