使用wget和Perl脚本从网页中提取信息

时间:2019-11-28 06:23:00

标签: perl wget

此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;
 }

1 个答案:

答案 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/;
相关问题