URI::Find - Extraktion von URIs aus beliebigen Texten
Veröffentlicht von Thomas Fahle am (Permalink)
URI::Find von Michael G Schwern vereinfacht das Extrahieren von URIs aus beliebigen Texten.
Beispiel URI Extraktion
Das Beispielprogramm holt eine Webseite und gibt den HTML-Quelltext an die Methode find. Die Methode find ruft bei jedem gefundenem URI die callback-Funktion callback mit zwei Parametern auf: Einem Objekt der Klasse URI::URL und dem gefundenem URI. Der Rückgabewert der callback-Funktion wird genutzt, um die gefundene URI im Text (hier in $html) zu ersetzen.
#!/usr/bin/perl use strict; use warnings; use URI::Find; use LWP::Simple; my $url = 'https://perl-howto.github.io'; my $html = get $url; # Container fuer URIs my %uris = (); my $finder = URI::Find->new( \&callback ); my $found = $finder->find( \$html ); # URIs absteigend sortiert ausgeben my @uris = reverse sort keys %uris; foreach my $uri (@uris) { print "$uri\n"; } exit(); sub callback { my ( $uri_url, $uri ) = @_; # $uri_url ist ein Objekt der Klasse URI::URL # Doppelte URIs entfernen $uris{$uri}++; # Der Ruckgabewert ersetzt die URI in \$html return "--- Ersetzt durch XXXXX ---"; }
Das Programm erzeugt folgende Ausgabe:
https://www.socialtext.net/perl5/index.cgi?events_2010_froscon http://www.zeit.de/digital/datenschutz/2010-09/twitter-oauthcalypse-authentification http://www.yahoo.de http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd http://www.w3.org/1999/xhtml http://www.thomas-fahle.de/perl-training/index.html http://www.thomas-fahle.de/perl-programmierung/index.html http://www.thomas-fahle.de/2010/08/kurzbericht-perlfroscon-2010-st-augustin-21-und-22-august-2010.html http://www.thomas-fahle.de http://www.slideshare.net/thomasfahle/dancer-5032076 http://www.slideshare.net/reneebperl/fr-os-con2010develnytprof http://www.slideshare.net/reneebperl/fr-os-con2010bmatrainer ......
URI::Find nimmt es bei Erkennung der URI mit dem Schema sehr genau - eine etwas laxere Erkennung bietet URI::Find::Schemeless.
Kommandozeile: urifind
URI::Find bietet auch ein Kommandozeilen Tool, urifind, welches Dateien nach URIs durchsucht.
$ urifind file
In bester *NIX-Manier lässt sich urifind auch als Filter verwenden:
$ wget https://perl-howto.github.io -O - | urifind -u -s -rerzeugt die selbe Ausgabe wie das oben gezeigte Beispiel.
Weitere Optionen liefert urifind -h.
Siehe auch
- CPAN: URI::Find
- CPAN: URI::Find::Schemeless
- CPAN: urifind find URIs in a document and dump them to STDOUT
- perlfaq9 - perldoc.perl.org
- Perl 2002 Advent Calendar: URI::Find
- CPAN: HTML::LinkExtor
- Web Techniques Column 62 (Jun 2001)