使用 wget 和 Perl 脚本从网页中提取信息
Pull information from webpage using wget and Perl Script
此 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;
}
你的主要问题似乎是你看错了table。该页面上有多个 table,您可以在创建解析器对象时使用 attribs
参数,以便 return 您感兴趣的对象。
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/;
此 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;
}
你的主要问题似乎是你看错了table。该页面上有多个 table,您可以在创建解析器对象时使用 attribs
参数,以便 return 您感兴趣的对象。
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/;