Thread URL aus HTML extrahieren (9 answers)
Opened by Salway at 2014-08-01 15:54

Gast Salway
 2014-08-01 19:31
#176667 #176667
Quote
Hi, 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.


Also es geht bei meinem Versuch hauptsächlich darum das Titel Bild eines Amazon Produktes herunterzuladen mithilfe von Perl. Ich weis das es für Amazon eine Api gibt. Mit der Arbeite ich auch bereits allerdings gibt die Api nur sehr kleine Produkt Bilder preis, aus diesem grund würde ich gerne das Produkt Bild ohne die Api runterladen damit ich auch das größte Bild mit der besten Qualität bekomme. Als kleines Beispiel mal ein Bild eines Produktes das ich mit der Api geladen habe:
http://ecx.images-amazon.com/images/I/51fWvmgiZXL.jpg

Und hier das Bild das ich gerne hätte von dem Produkt:
http://ecx.images-amazon.com/images/I/61sFRt7Sw-L._SL1500_.jpg

Mein Versuch mit URI::Find funktioniert bei diesem Beispiel auch. Das Titelbild des Produktes wird an erster Position angezeigt, wie erwartet.

Probiere ich das ganze aber mit diesem Produkt http://www.amazon.com/gp/product/B00CMTF8XQ
wird schon ein anderes Bild an erster stelle ausgegeben als das erwartete Titelbild.

Mein URI::Find Versuch sieht so aus:

Code: (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
#!/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 ---";
}


Ich bin mir nicht sicher ob für diese aufgabe URI:Find noch ausreicht.

modedit Editiert von GwenDragon: URLs in Code-Tags
Last edited: 2014-08-02 09:52:01 +0200 (CEST)

View full thread URL aus HTML extrahieren