Bild von Amazon downloaden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
spartacus
User
Beiträge: 16
Registriert: Montag 11. Mai 2009, 19:00

Hallo

Ich hab ein kleines Projekt am laufen, das schlussendlich die Covers meiner Musiksammlung downloaden soll. Nun bin ich soweit, dass die Suche auf Amazon funktioniert. Dazu gebrauche ich das pyaws Modul. Mit Hilfe dieses Moduls bekomme ich unter anderem die Titel der Resultate und die URLs. Nun sollte es doch möglich sein, das Bild, das jeweils bei den Ergebnisse angezeigt wird, herunterzuladen. Nur habe ich keine Ahnung wie ich mit Python auf einer Webside herum navigieren kann. Kann mir jemand Module oder irgendwelche HowTos schreiben, die das ermöglichen?


Gruss spartacus
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Warum willst du rumnavigieren, wenn du sowieso nur das Bild willst, dass bei den Suchergebnissen angezeigt wird? Ich habe mir den Quelltext der Seite nicht angesehen, aber ich gehe davon aus, dass alle Bilder einer gleichen CSS Klasse angehören. Diese musst du herausfinden und kannst dann über diese das Bild und dessen Link ansprechen.
spartacus
User
Beiträge: 16
Registriert: Montag 11. Mai 2009, 19:00

Mhm... Da hast du eigentlich recht. Ich hab mir nun mal den Quelltext der Seite angeschaut. Da find ich unter anderem diesen abschnitt:

Code: Alles auswählen

<script>
  registerImage("original_image", "http://ecx.images-amazon.com/images/I/41OdgqctDjL._SL500_AA240_.jpg", "<a href="+'"'+"http://www.amazon.de/gp/product/images/B0017HOHTA/sr=8-1/qid=1242068402/ref=dp_image_0?ie=UTF8&n=290380&s=music&qid=1242068402&sr=8-1"+'"'+" target="+'"'+"AmazonHelp"+'"'+" onclick="+'"'+"return amz_js_PopWin(this.href,'AmazonHelp','width=700,height=600,resizable=1,scrollbars=1,toolbar=1,status=1');"+'"'+"  ><img onload="+'"'+"if (typeof uet == 'function') { uet('af'); }"+'"'+" src="+'"'+"http://ecx.images-amazon.com/images/I/41OdgqctDjL._SL500_AA240_.jpg"+'"'+" id="+'"'+"prodImage"+'"'+" width="+'"'+"240"+'"'+" height="+'"'+"240"+'"'+" border="+'"'+"0"+'"'+" alt="+'"'+"Kanonen auf Spatzen - 28 Live Songs (2CD + DVD)"+'"'+"  /></a>", "<br /><a href="+'"'+"http://www.amazon.de/gp/product/images/B0017HOHTA/sr=8-1/qid=1242068402/ref=dp_image_text_0?ie=UTF8&n=290380&s=music&qid=1242068402&sr=8-1"+'"'+" target="+'"'+"AmazonHelp"+'"'+" onclick="+'"'+"return amz_js_PopWin(this.href,'AmazonHelp','width=700,height=600,resizable=1,scrollbars=1,toolbar=1,status=1');"+'"'+"  >Mehr Bilder ansehen</a>");
</script>
Die direkte URL zum Bild wäre
http://ecx.images-amazon.com/images/I/4 ... SS400_.jpg

Diese kommt in diesem Abschnitt auch vor. Nur wie bekomme ich diese URL daraus?
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Ich habe mir mal die Mühe gemacht... (nicht zuletzt weil ich Beatsteaks mag)

Code: Alles auswählen

<div class="productImage"><a href="http://www.amazon.de/Kanonen-auf-Spatzen-Live-Songs/dp/B0017HOHTA/ref=sr_1_1?ie=UTF8&s=music&qid=1242070231&sr=8-1"> <img src="http://ecx.images-amazon.com/images/I/41OdgqctDjL._SL160_AA115_.jpg" class="" alt="Produkt-Information" border="0" height="115" width="115"> </a></div>
Das sollte ja eigentlich reichen.
problembär

Hi,

um irgendwas mit Python runterzuladen, hab' ich neulich mal folgende Funktion geschrieben:

Code: Alles auswählen

#!/usr/bin/env python
#-*- coding: iso-8859-1 -*-

import os
import sys

import urllib2

def downloadNSaveFile(site, fpath, fname, verbose = False):

    fpath = fpath.strip("/")
    fname = fname.strip("/")

    wwwname = os.path.join(site, fpath, fname)
    localname = os.path.join(os.getcwd(), fpath, fname) 
    localdir = os.path.join(os.getcwd(), fpath)

    if os.path.isfile(localname):
        if verbose:
            print localname + " already exists."
        return "already exists"
        
    try:
        ht = urllib2.urlopen(wwwname)
    except:
        print wwwname + " not found."
        return "not found"

    if not os.path.isdir(localdir):
        os.makedirs(localdir)

    fh = file(localname, "wb")
    fh.write(ht.read())
    fh.close()
    ht.close()

    if verbose:
        print localname + " fetched."

    return "fetched"


downloadNSaveFile("http://www.someurl.com",
                  "somedirectory/somemoredirectory",
                  "file.jpg",
                  verbose = True)
HTH
spartacus
User
Beiträge: 16
Registriert: Montag 11. Mai 2009, 19:00

@problembär
Das Problem ist eigentlich nicht der Download ansich, sondern das Herausfinden des Namen des files und somit der URL. Aber eine nette Funktion. Werde mir sicher was abkupfern.

@SchneiderWeisse
Leider habe ich keine Ahnung von HTML und wie ich HTML in Python einbinden kann. Ich weiss nicht einmal was dein Code macht. Kannst du mir eine kurze Erklärung abgeben?
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Der Code macht gar nichts, das ist lediglich der "Container" für das Bild. Jetzt musst du nur noch mit einem HTML-Parser wie zB BeautifulSoup auf dieses Element zugreifen und hast den Bildpfad. Da es mehrere dieser Klasen (da mehrere Bilder) gibt musst du nur noch über diese iterieren und downloaden.
spartacus
User
Beiträge: 16
Registriert: Montag 11. Mai 2009, 19:00

Ok... dann werd ich mal diese Sache angehen. Vielen dank für deine Hilfe.

spartacus
problembär

spartakus hat geschrieben:Das Problem ist ... das Herausfinden ... der URL.
spartakus hat geschrieben:Mit Hilfe dieses Moduls bekomme ich unter anderem die Titel der Resultate und die URLs.
Widerspricht sich irgendwie :roll:.

Gruß
ichbinsisyphos
User
Beiträge: 120
Registriert: Montag 4. Juni 2007, 19:19

Ich lad mir meistens den Quelltext in eine Variable und such die links mit re. Reicht das nicht?
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Nicht nur das. Es ist sogar der beste Weg, den jeder Profi hier empfiehlt! Aber das weißt du ja sicherlich schon, weil du seit fast 2 Jahren hier registriert bist. Seitdem hast du bestimmt alle Threads hier aufmerksam mitverfolgt und dabei mitgedacht.

Edit: Ich bin hochnäsig und arrogant!
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Warum nicht direkt eine Abfrage via AWS (neuerdings heißt das wohl PAA :?: ):

http://ecs.amazonaws.de/onca/xml?Servic ... Beatsteaks

Das gibt - wenn man eine valide subscription-id in die url eingefügt hat - ein XML Dokument zurück, das man bequem parsen kann: http://paste.bitbin.de/f73969c07

Das ist m.E. verlässlicher und man kann noch zwischen verschiedenen Covergrößen etc. wählen.

Einen schönen Generator für solche Requests gab es immer hier. Die Seite scheint aber gerade nicht aufrufbar zu sein.

lG

dsn
ichbinsisyphos
User
Beiträge: 120
Registriert: Montag 4. Juni 2007, 19:19

derdon hat geschrieben:Nicht nur das. Es ist sogar der beste Weg, den jeder Profi hier empfiehlt! Aber das weißt du ja sicherlich schon, weil du seit fast 2 Jahren hier registriert bist. Seitdem hast du bestimmt alle Threads hier aufmerksam mitverfolgt und dabei mitgedacht.

Edit: Ich bin hochnäsig und arrogant!
Check ich nicht. Schreib am besten nochmal in Klartext.

Sarkasmus is sicher drin, aber schwer zu sagen, was wirklich sarkastisch gemeint war und was nicht.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

ichbinsisyphos hat geschrieben:Sarkasmus is sicher drin, aber schwer zu sagen, was wirklich sarkastisch gemeint war und was nicht.
So bin ich eben :wink:
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

ichbinsisyphos hat geschrieben:
derdon hat geschrieben:Nicht nur das. Es ist sogar der beste Weg, den jeder Profi hier empfiehlt! Aber das weißt du ja sicherlich schon, weil du seit fast 2 Jahren hier registriert bist. Seitdem hast du bestimmt alle Threads hier aufmerksam mitverfolgt und dabei mitgedacht.

Edit: Ich bin hochnäsig und arrogant!
Check ich nicht. Schreib am besten nochmal in Klartext.
Er wollte damit zum Ausdruck bringen, dass du du einen HTML/XML-Parser benutzen sollst und keine Regulären Ausdrücke.
Das Leben ist wie ein Tennisball.
spartacus
User
Beiträge: 16
Registriert: Montag 11. Mai 2009, 19:00

@Problembär
Ich bekomme den Link zur Suchergebniss. Auf dieser Seite ist dann das Bild vom Cover. Somit fehlt mir aber immer noch den direkten Link zum Bild.

Hab aber nun die Lösung gefunden. Das Modul pyAWS bietet alle funktionen, nur habe ich diese leider übersehen.

Code: Alles auswählen

import ecs

ecs.setLocale("de")             #Auf der deutschen Seite suchen                       
ecs.setLicenseKey("XXXXXXXXXXXXX")       #License-Key eingeben

#Suche starten:
cd = ecs.ItemSearch("Beatsteaks",  SearchIndex='Music',  ResponseGroup ='Medium,Images,ItemAttributes,Request,EditorialReview,Subjects')
print cd[1].LargeImage.URL      #Ausgabe der Cover-URL
ichbinsisyphos
User
Beiträge: 120
Registriert: Montag 4. Juni 2007, 19:19

EyDu hat geschrieben:
ichbinsisyphos hat geschrieben:
derdon hat geschrieben:Nicht nur das. Es ist sogar der beste Weg, den jeder Profi hier empfiehlt! Aber das weißt du ja sicherlich schon, weil du seit fast 2 Jahren hier registriert bist. Seitdem hast du bestimmt alle Threads hier aufmerksam mitverfolgt und dabei mitgedacht.

Edit: Ich bin hochnäsig und arrogant!
Check ich nicht. Schreib am besten nochmal in Klartext.
Er wollte damit zum Ausdruck bringen, dass du du einen HTML/XML-Parser benutzen sollst und keine Regulären Ausdrücke.
Hat er aber nicht.
Antworten