Home > Notizie > Download delle immagini da Flickr

Download delle immagini da Flickr

Ciao a tutti qualche giorno fa volevo provare ad utilizzare il programma Metapixel per realizzare dei fotomosaici come mostrato qui. Affinchè il risultato sia il migliore possibile è necessario avere a disposizione un numero molto elevato di immagini che poi saranno composte per andare a creare il mosaico. Il problema che si presentava a questo punto era: dove trovo tante immagini?
Ho quindi pensato al sito Flickr dove gli utenti mettono a disposizione immagini/foto da loro realizzate… la ricerca delle foto può essere fatta per soggetto ritratto o anche per licenza con la quale vengono messe a disposizione. Ovviamente il mio interesse si è indirizzato verso quelle che sono state licenziate con le Creative Commons. Ho notato che tutte le pagine che mostravano le immagini avevano questo URL:

http://www.flickr.com/search/?q=&l=cc&ct=0&mt=all&adv=1#page=

e guardando il sorgente della pagina le immagini erano indicate da questo tag:

<div class="ResultsThumbsChild">
   <div style="position:relative">
	<span class="photo_container pc_t"><a href="xxx" title="yyy"><img src="zzz" width="100" height="67" alt="www"  class="pc_img" border="0" /></a></span>
	<a href="xxx" onclick="return F.explore_search.show_detail(this,event,'3673363334')" title="More information" class="search-moreinfo search-moreinfo-small" style="margin-right:8px"><img src="http://l.yimg.com/g/images/spaceout.gif" /></a>
	</div>
	      <p class="ResultsThumbsChild">From <a href="xxx">xxx</a></p>
	</div>

Dove la parte che mi interessava (cioè quella che aveva il link all’immagine) era:

img src="zzz"

ho quindi pensato di scrivere un piccolo script in python in modo che andasse a leggere il sorgente della pagina e scaricasse tutte le immagini che erano linkate. Queste sono le pagine da cui ho preso spunto per creare lo script:

Questo è quello che ne è uscito (ho messo i commenti direttamente nel codice per spiegare cosa fa), file parsehtml.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from sgmllib import SGMLParser
 
# definisco la classe che si occuperà di leggere il file html 
# e salvare i link alle immagini
class PARSER(SGMLParser):
    def reset(self):                              
        SGMLParser.reset(self)
        #vettore che conterrà i link
        self.linkimage = []
 
    #funzione che legge il file e cerca tutti i tag con img
    def start_img(self, attrs):      
        #per tutti i tag img leggo il campo src               
        src = [v for k, v in attrs if k=='src'] 
        for line in src:
                # se il campo src contiene farm allora lo salvo perchè è
                # un'immagine che mi interessa
		if (line.find("farm") != -1):
                        #aggiungo il link all'immagine nel vettore della classe
		    	self.linkimage.extend(src)

file main.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import parsehtml, os, urllib
 
# scarico tutte le immagini delle prime 100 pagine
for i in range(1,101):
        # apro una connessione e scarico la pagina con quell'url, ad ogni iterazione del ciclo prendo una pagina diversa
        sock = urllib.urlopen("http://www.flickr.com/search/?q=&l=cc&ct=0&mt=all&adv=1#page=" + str(i))
        # mi faccio stampare la pagina che sto analizzando,
        # in realtà non serve a nulla ma è utile per capire a che punto sono arrivato
        print "http://www.flickr.com/search/?q=&l=cc&ct=0&mt=all&adv=1#page=" + str(i)
        # creo la classe che andrà ad analizzare la pagina
        parser = parsehtml.PARSER()
        # associo alla classe la pagina che ho appena scaricato
        parser.feed(sock.read())
        sock.close()
        parser.close()
        # per ogni link che è stato messo nel vettore scarica l'immagine corrispondente
        # per fare il download utilizzo un programma installato sul sistema chiamato aria2c
        # e salvo tutto nella cartella images
        for src in parser.linkimage: 
	        os.system('aria2c -d images ' + src)

salvando i file nella stessa cartella, creando la cartella images e lanciando il programma con il classico:

python main.py

il vostro pc farà il download di tutte le immagini nelle prime 100 pagine mentre voi vi fate la vostra rossa (birra) preferita.

Ciao Alberto

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)
Categorie:Notizie Tag:
  1. Nessun commento ancora...
  1. Nessun trackback ancora...
E' necessario che tu sia collegato per poter inserire un commento.