Thread URL aus HTML extrahieren
(9 answers)
Opened by Salway at 2014-08-01 15:54
1. Du legst die gefundenen URLs in einem Hash als Schlüssel ab. Ein Hash ist unsortiert, die Schlüssel kommen da in einer beliebigen Reihenfolge wieder raus; nicht unbedingt in der, in der sie in den Hash gekommen sind.
2. Du sortierst die URLs selber; wie soll da denn die originale Reihenfolge beibehalten werden können? Was kann URI::Find also dafür, dass Du die gefundenen URLs in einen unsortierten Hash ablegst und anschließend die Treffer selber noch umsortierst? Lege die gefundenen URLs in einen Array; und nur, wenn sie nicht schon hereingelegt wurden. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 #!/usr/bin/perl use strict; use warnings; use feature qw( say ); use List::Util qw( first ); use URI::Find; use LWP::Simple; # Container fuer URIs my @urls; # Sub Routines ###################################### { my %seen; sub callback { # $uri_url ist ein Objekt der Klasse URI::URL my ( $uri_url, $uri ) = @_; # URIs nur einmal hinzufügen push @urls, $uri if !$seen{$uri}++; } sub reset_seen { %seen = (); } } # Main Program ###################################### # http://www.amazon.com/gp/product/B00CMTF8XQ my $url = shift @ARGV; die "No URL specified on command line.\n" unless defined $url && length $url; my $html = get $url; my $finder = URI::Find->new( \&callback ); my $found = $finder->find( \$html ); # gebe erste gefundene URL aus say first { /1500_.jpg$/ } @urls; meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |