Mit Regex String aus HTML extrahieren (Perl)

Hi Habo,

ich würde gerne aus folgender Seite die Anzahl der Höhrer extrahieren, Dazu habe ich folgendes Script in Perl geschrieben:
Code:
#!/bin/perl

use strict;
sub lastfm_listeners{
	my $artist = shift;
	my ($ua, $response, $htmlstuff, $listeners);
	use LWP::UserAgent;
	use XML::Simple;
	use Data::Dumper;

	$ua = LWP::UserAgent -> new;
	$ua -> timeout(10);
	
	$response = $ua -> get("http://www.last.fm/music/$artist");
	
	if ($response -> is_success) {
		$htmlstuff = $response -> content;
	} else {
		die $response -> status_line;
	}
	
	$listeners = ($htmlstuff =~ /<strong>[a-zA-Z0-9]*<\/strong>/);
	print $listeners;
}

print lastfm_listeners(shift);

Der HTML-Code um diese Stelle herum sieht so aus:
Code:
<strong>138</strong> listeners on

Anstelle der gewünschten 138 bekomme ich jedoch immer eine 1 zurück.
Kann mir jemand von euch sagen, wo das Problem liegt?

mfg 2Bios
 
vllt gibts im code noch ne andere stelle, an der "<strong>1</strong>" steht...?
 
@v01d: ups, ich hab die falsche version gepostet. thx

@LX: ich bekomme jetzt ein 11 zurück ^^. ($listeners) = ($htmlstuff ... funktioniert auch nicht so wie's sollte...

anbei die aktuelle fassung:
Code:
#!/bin/perl
use strict;
sub howmainstream{
	my $artist = shift;
	my ($ua, $response, $htmlstuff, @listeners);
	use LWP::UserAgent;
	use XML::Simple;
	use Data::Dumper;

	$ua = LWP::UserAgent -> new;
	$ua -> timeout(10);
	
	$response = $ua -> get("http://www.last.fm/music/$artist");
	
	if ($response -> is_success) {
		$htmlstuff = $response -> content;
	} else {
		die $response -> status_line;
	}
	
	@listeners = ($htmlstuff =~ /<strong>[0-9]*<\/strong> listeners on/);
	print @listeners;
}
print howmainstream(shift);
 
Achja, du musst natürlich auch noch klammern, welchen Teil du eigentlich zurückgegeben haben willst:

Code:
@listeners = ($htmlstuff =~ /<strong>([0-9]*)<\/strong> listeners on/);
 
was lerne ich aus deiner antwort? manual genauer lesen ^^ vielen dank LX :)

aber eine frage hätte ich aber noch: wie bekomme ich jetzt diese eklige 1 am ende wech?
edit: letzteres kommt vom aufruf besagten funktion. danke nochmals an alle helfer :)
 
Zurück
Oben