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
Bild von Amazon downloaden
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.
Mhm... Da hast du eigentlich recht. Ich hab mir nun mal den Quelltext der Seite angeschaut. Da find ich unter anderem diesen abschnitt:
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?
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>
http://ecx.images-amazon.com/images/I/4 ... SS400_.jpg
Diese kommt in diesem Abschnitt auch vor. Nur wie bekomme ich diese URL daraus?
Ich habe mir mal die Mühe gemacht... (nicht zuletzt weil ich Beatsteaks mag)
Das sollte ja eigentlich reichen.
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>
Hi,
um irgendwas mit Python runterzuladen, hab' ich neulich mal folgende Funktion geschrieben:
HTH
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)
@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?
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?
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.
spartakus hat geschrieben:Das Problem ist ... das Herausfinden ... der URL.
Widerspricht sich irgendwie .spartakus hat geschrieben:Mit Hilfe dieses Moduls bekomme ich unter anderem die Titel der Resultate und die URLs.
Gruß
-
- 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?
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!
Edit: Ich bin hochnäsig und arrogant!
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
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
-
- User
- Beiträge: 120
- Registriert: Montag 4. Juni 2007, 19:19
Check ich nicht. Schreib am besten nochmal in Klartext.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!
Sarkasmus is sicher drin, aber schwer zu sagen, was wirklich sarkastisch gemeint war und was nicht.
Er wollte damit zum Ausdruck bringen, dass du du einen HTML/XML-Parser benutzen sollst und keine Regulären Ausdrücke.ichbinsisyphos hat geschrieben:Check ich nicht. Schreib am besten nochmal in Klartext.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!
Das Leben ist wie ein Tennisball.
@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.
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
-
- User
- Beiträge: 120
- Registriert: Montag 4. Juni 2007, 19:19
Hat er aber nicht.EyDu hat geschrieben:Er wollte damit zum Ausdruck bringen, dass du du einen HTML/XML-Parser benutzen sollst und keine Regulären Ausdrücke.ichbinsisyphos hat geschrieben:Check ich nicht. Schreib am besten nochmal in Klartext.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!