我有一个条件,我想从特定标签中检索文本,但它似乎没有返回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语句之外的print表示存在未定义的值,但我知道它应该返回true,因为这些标记确实存在。
<th class="moduleCode">COM137<small>CRN: 33413</small></th>
感谢
答案 0 :(得分:3)
您正在呼叫HTML::TreeBuilder->new_from_content
,但您提供的是网址而不是内容。您必须先get
HTML,然后才能将其传递给HTML::TreeBuilder
。
也许最简单的方法是使用LWP::Simple导入一个名为get
的子程序。这将读取URL上的数据并将其作为字符串返回。
从不执行条件块的原因是标签名称中有空格。您需要"div"
而不是"div "
。
另请注意以下事项:
您不应使用printf
输出单个字符串,并将该字符串作为格式说明符。它可能会生成缺少参数警告,并且无法正确输出字符串。
理想情况下,您应该使用词法文件句柄和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";