此Perl脚本的目的是使用wget和Perl从网页中提取信息。在这种情况下,这是我尝试从以下网站提取信息的网站:https://nocable.org/tv-listings/bm95-pomona-ca-91768
我只想显示标题。例如,
2.1 - The Ellen Degeneress Show
4.1 - NBC News
7.1 - Hell's Kitchen
就是这样。
这是我到目前为止的内容,但是我不确定我是对还是错。任何人都可以在仅显示标题的2.1、4.1和7.1频道上提供帮助或提供建议吗?特别是wget和Perl脚本。感谢任何回应,因为我仍在学习Perl。
use warnings;
use strict;
use feature 'say';
use LWP::Simple;
use HTML::TableExtract;
use open qw(:encoding(UTF-8) :std);
my $url = ' https://nocable.org/tv-listings/bm95-pomona-ca-91768';
my $page = get($url) or die "Can't load $url: $!";
my $tec = HTML::TableExtract->new();
$tec->parse($page);
foreach my $rowref ($tec->rows)
{
next if not @$rowref;
# Clean up undefined/whitespace/newlines, often found in HTML
my @row = map {
$_ = '' if not defined; # keep undefined fields for formatting
s/^\s*|\s*$//g; #/ leading and trailing whitespace
s/\s+|\n/ /g; # multiple spaces, newlines
$_ # return it
} @$rowref;
say join ' | ', @row;
}
答案 0 :(得分:0)
您的主要问题似乎是您看错了表格。该页面上有多个表,您可以在创建解析器对象时使用attribs
参数,以返回您感兴趣的对象。
my $tec = HTML::TableExtract->new(attribs => {id => 'programming_data' });
已添加,您的代码将打印所有频道的信息。然后,您需要创建一种方法来识别您感兴趣的渠道。我使用了正则表达式:
my @channels = qw(2.1 4.1 7.1);
my $channel_re = '\b(' . join('|', map { quotemeta } @channels) . ')\b';
在主循环中,您可以跳过您不感兴趣的频道:
next unless $rowref->[0] =~ /$channel_re/;