1
2
3
4
5
6
7
http://site/images/I/61cbCGzH1hL._SL1001_.jpg
http://site/images/I/710TxT7aX0L._SY355_.jpg
http://site/images/I/61cbCGzH1hL._SL1001_.jpg
http://site/images/I/61WBOyRAhNL._SL1001_.jpg
http://site/images/I/41c3CszH1hL._SL1001_.jpg
http://site/images/I/61E9RFObPiL._SX522_.jpg
http://site/images/I/71cbCszH1hL._SL1001_.jpg
Guest SalwayGuten Tag,
Ich habe bereits das Modul URI::Find ausprobiert mit dem ich alle Bilder mit der Endung 1001_.jpg extrahieren konnte, allerdings mischt mir das Modul die Bilder alle durch so das die Reihenfolge in der die Bilder auf der Website vorkommen nicht mehr stimmt.
QuoteHi, das kann ich so nicht nachvollziehen oder bestätigen.
Bei meinem (kurzen und schnellen) Test stimmt die Reihenfolge der gefundenen Links mit der Reihenfolge der Links im Text überein.
Zeige doch bitte mal Deinen Versuch mit CPAN:URI::Find.
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
#!/usr/bin/perl
use strict;
use warnings;
use URI::Find;
use LWP::Simple;
my $url = 'http://www.amazon.com/gp/product/B00CMTF8XQ';
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;
my @match = grep ( /1500_.jpg$/ ,@uris );
foreach my $uri (@match) {
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 ---";
}
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;
Guest SalwayDu meinst das erste Vorkommen im HTML-Quelltext, oder?Ich bin auf der suche nach dem ERSTEN Bild auf der webseite das die Endung 1001_.jpg hat.
QuoteDu meinst das erste Vorkommen im HTML-Quelltext, oder?
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
use URI::Find; my $search = '1001_.jpg'; my $found; my $finder = URI::Find->new( sub { my $uri = shift; return if $found; say $uri if ($uri =~ m/\Q$search\E$/ && ++$found); } ); local $/ = undef; my $line = <DATA>; $finder->find(\$line); __DATA__ http://site/images/I/61cbCGzH1hL1._SL1001_.jpg http://site/images/I/710TxT7aX0L._SY355_.jpg http://site/images/I/61cbCGzH1hL2._SL1001_.jpg http://site/images/I/61WBOyRAhNL3._SL1001_.jpg http://site/images/I/41c3CszH1hL4._SL1001_.jpg http://site/images/I/61E9RFObPiL._SX522_.jpg http://site/images/I/71cbCszH1hL5._SL1001_.jpg