如何使用curl
获取任何html标记的内容?
在以下脚本中获取例如h1
内容:
#!/usr/bin/perl
use strict;
use warnings;
my $page = `curl www.yahoo.com`;
print "Page: \n";
sleep(5);
#print "$page \n";
if ($page =~ m/<h1\s*>(.*)<\/h1\s*>/ig){
print "$1 \n";
}
我只得到一场比赛。我如何获得所有比赛?
答案 0 :(得分:2)
你可以得到这样的所有比赛:
my @matches = $page =~ /<h1\b[^>]*>(.*?)<\/h1>/ig;
print "@matches\n";
(但请注意,在yahoo.com上,有一个单独的h1标签)
答案 1 :(得分:2)
Parsing HTML with regexes is a sin。幸运的是,周围有许多解析器。我特别喜欢Mojo套房:
use strict; use warnings;
use feature 'say';
use Mojo;
my $ua = Mojo::UserAgent->new(max_redirects => 5); # redirects defaults to zero
for my $h3 ($ua->get('www.stackoverflow.com')->res->dom('h3')->each) { # use CSS selectors
say $h3->all_text;
}
答案 2 :(得分:1)
使用 while 循环代替 if :
while ($page =~ m/<h1\s*>(.*)<\/h1\s*>/ig) {
print "$1 \n";
}