2013-08-18 35 views
0

如何使用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

僅供參考,你可以使用,而不是捲曲Perl的LWP模塊。 – squiguy

+0

@squiguy:我不知道這些 – Jim

+2

[爲了瀏覽](https://metacpan.org/module/LWP)。乾杯。 – squiguy

回答

2

你可以得到這樣所有的比賽:

my @matches = $page =~ /<h1\b[^>]*>(.*?)<\/h1>/ig; 

print "@matches\n"; 

(但要注意,上yahoo.com,只有一個h1標籤)

1

使用循環,而不是如果

while ($page =~ m/<h1\s*>(.*)<\/h1\s*>/ig) { 
    print "$1 \n"; 
} 
2

Parsing HTML with regexes is a sin。幸運的是,有很多解析器在周圍。我特別喜歡魔套裝:

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; 
} 
相關問題