Perl:使用 HTML::TokeParser 提取具有特定 class 的 HTML 元素
Perl : Extract an HTML element with a particular class using HTML::TokeParser
我正在尝试提取与 class "tablehead1".
相对应的 < td > 标签中存在的 HTML 内容
< td class="tablehead1"> Market < /td >
解析时,我得到了整个 html 文件中 < td > 标签的所有文本内容。
但我只需要 < td > 标签中带有特定 class "tablehead1" .
的内容
下面的代码哪里出错了?
use HTML::TokeParser;
open(DATA,"<KeyStats.html") or die "Can't open data";
my $p = HTML::TokeParser->new(*DATA);
while (my $token = $p->get_tag('td')) {
my $url = $token->[1]{class} || "tablehead1";
my $text = $p->get_trimmed_text("/td");
if (length($text)<30&&length($text)>0) { print "$text\n"; }
}
您并没有真正执行检查 class
是否真的 tablehead1
。
替换
my $url = $token->[1]{class} || "tablehead1";
来自
next unless $token->[1]{class} eq "tablehead1";
应该会给你预期的结果。此外,您应该添加检查实际 <td>
是否真的有密钥 class
,例如通过
next unless grep( /^class$/, @{$token->[2]} ) && $token->[1]{class} eq "tablehead1";
我正在尝试提取与 class "tablehead1".
相对应的 < td > 标签中存在的 HTML 内容< td class="tablehead1"> Market < /td >
解析时,我得到了整个 html 文件中 < td > 标签的所有文本内容。 但我只需要 < td > 标签中带有特定 class "tablehead1" .
的内容下面的代码哪里出错了?
use HTML::TokeParser;
open(DATA,"<KeyStats.html") or die "Can't open data";
my $p = HTML::TokeParser->new(*DATA);
while (my $token = $p->get_tag('td')) {
my $url = $token->[1]{class} || "tablehead1";
my $text = $p->get_trimmed_text("/td");
if (length($text)<30&&length($text)>0) { print "$text\n"; }
}
您并没有真正执行检查 class
是否真的 tablehead1
。
替换
my $url = $token->[1]{class} || "tablehead1";
来自
next unless $token->[1]{class} eq "tablehead1";
应该会给你预期的结果。此外,您应该添加检查实际 <td>
是否真的有密钥 class
,例如通过
next unless grep( /^class$/, @{$token->[2]} ) && $token->[1]{class} eq "tablehead1";