Распечатать URL-адреса с веб-страницы на STDOUT в Perl - PullRequest
0 голосов
/ 10 июля 2020

Как мне распечатать URL-адреса со страницы HTML в STDOUT и перебирать их, чтобы сделать то же самое?

use strict;
use warnings;
use 5.010;         
use LWP::Simple qw(get);
use HTML::TreeBuilder 5 -weak;

my $name = 'perl';
my $limit = 100;
my $offset = 0;

    
my $total;
while (1) {
my $url = "http://hoshikuso.jp/?to=hunminj@ktng.com?limit=$limit&offset=$offset";
my $html = get $url;
my $tree = HTML::TreeBuilder->new;
print ($tree);
$tree->parse($html);

if (not $total) {
    $total = $tree->look_down('http', 'https')->as_text;
    say $total;
}
};

Ответы [ 2 ]

2 голосов
/ 12 июля 2020

Вы можете сделать большую часть этого прямо в конвейере Mojo :: Collections . Есть даже метод size, который скажет вам, сколько элементов находится в коллекции, без вашего подсчета :. Команда grep удаляет странные теги a на этой странице, map может делать то, что вам нравится, и после этого size возвращает вам результат. У меня много примеров в Веб-клиенты Mojo :

#!/usr/bin/env perl
use v5.10;
use open qw(:std :utf8);

use warnings;
use strict;
use Mojo::UserAgent;
use Mojo::Util qw(trim);

my $url = 'https://www.tripadvisor.com/Restaurants-g147275-Varadero_Matanzas_Province_Cuba.html';
my $ua = Mojo::UserAgent->new;


my $count = $ua->get( $url )
    ->res
    ->dom
    ->find( 'a[href]' )
    ->grep( sub { $_->attr('href') =~ m|\A/RestaurantsNear-| } )
    ->map( sub {
        my $t = trim( $_->all_text );
        printf qq(%s -> "%s"\n), $_->attr("href"), $t;
        })
    ->size;

say "Total is $count";
1 голос
/ 11 июля 2020

Этот код должен помочь вам на пути к вашей цели. Эти три страницы do c должны быть всем, что вам нужно, чтобы продвинуться дальше Mojo :: DOM Mojo :: Collection Mojo :: UserAgent

#!/usr/bin/env perl
use warnings;
use strict;
use Mojo::UserAgent;

my $url = 'https://www.tripadvisor.com/Restaurants-g147275-Varadero_Matanzas_Province_Cuba.html';
my $ua = Mojo::UserAgent->new;

my $total=0;

my $page = $ua->get( $url )->res->dom() ;   ## returns Mojo::DOM object of whole page
for my $node ( $page->find( "a[href]" )->each() )  ## returns Mojo::DOM object of a tags with href attribute
{
    print "###########\n";
    print $node->text() . "\n";
    print $node->attr("href")  ."\n";
    $total++;
}

print "\n\ntotal A tags with href attribute : $total\n";
...