Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2
html-parse-links3.pl
#!/usr/local/bin/perl -w
# html-parse-links3.pl -- Links aus einer HTML-URL extrahieren
# mit HTML::LinkExtor und Callback-Funktion.
# Basis-Anpassung mit dem URI::URL-Modul.
# URL-Download mit LWP::UserAgent.
use LWP::UserAgent; # Zum Download der URL
use HTML::LinkExtor; # Der Link-Extraktor
use URI::URL; # Relative in absolute Links konvertieren.
my $url = shift(); # Die zu holende URL aus der Kommandozeile
my $p = HTML::LinkExtor->new(\&callback); # Parser erzeugen.
# URL anfordern und gleichzeitig mit $p parsen:
my $ua = new LWP::UserAgent;
my $res = $ua->request(HTTP::Request->new(GET => $url),
sub { $p->parse(shift()) });
unless ($res->is_success()) {
die $res->error_as_HTML();
}
# Alle Links absolut machen:
my $base = $res->base(); # Die Basis liefert uns HTTP::Response
my @abs_alinks = map { $_ = url($_, $base)->abs() } @alinks;
my @abs_pics = map { $_ = url($_, $base)->abs() } @pics;
my @abs_others = map { $_ = url($_, $base)->abs() } @others;
print "<a>-Links :\n", join("\n", @abs_alinks), "\n";
print "<img>-Links:\n", join("\n", @abs_pics), "\n";
print "Other Links:\n", join("\n", @abs_others), "\n";
# Diese Callback-Funktion callback() wird jedesmal aufgerufen,
# wenn die HTML::LinkExtor()-Instanz $p einen Link-Tag gefunden hat.
# Bei <tagname attr1=url1 attr2=url2>
# wird in @_ uebergeben: (tagname, attr1 => url1, attr2 => url2)
# Beachte, dass bei Bedarf tagname und attr1, attr2 in Kleinbuchstaben
# konvertiert werden, bevor callback() aufgerufen wird!
sub callback {
my ($tag, %links) = @_;
# Je nach Typ der Links unterschiedlich reagieren:
if ($tag eq 'a') {
# Ein <a>-Link:
push(@alinks, values %links);
} elsif ($tag eq 'img') {
# Ein <img>-Link:
push(@pics, values %links);
} else {
# Ein anderer Typ von Links:
push(@others, values %links);
}
}
[Prev] [Up] [Relevant Chapter] [Next]
[Alte Quelle]
| Last modified: $Date: 2006/05/18 12:55:48 $ FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy |
|