2010-10-26 16 views
26

In due parti. Sto cercando di scaricare più podcast archiviati Cory Doctorow dall'archivio Internet. Quelli vecchi che non entrano nel mio feed di iTunes. Ho scritto lo script ma i file scaricati non sono formattati correttamente.Come posso scaricare un file zip in python usando urllib2?

Q1 - Cosa cambio per scaricare i file zip mp3? Q2 - Qual è un modo migliore per passare le variabili in URL?

# and the base url. 

def dlfile(file_name,file_mode,base_url): 
    from urllib2 import Request, urlopen, URLError, HTTPError 

    #create the url and the request 
    url = base_url + file_name + mid_url + file_name + end_url 
    req = Request(url) 

    # Open the url 
    try: 
     f = urlopen(req) 
     print "downloading " + url 

     # Open our local file for writing 
     local_file = open(file_name, "wb" + file_mode) 
     #Write to our local file 
     local_file.write(f.read()) 
     local_file.close() 

    #handle errors 
    except HTTPError, e: 
     print "HTTP Error:",e.code , url 
    except URLError, e: 
     print "URL Error:",e.reason , url 

# Set the range 
var_range = range(150,153) 

# Iterate over image ranges 
for index in var_range: 

    base_url = 'http://www.archive.org/download/Cory_Doctorow_Podcast_' 
    mid_url = '/Cory_Doctorow_Podcast_' 
    end_url = '_64kb_mp3.zip' 
    #create file name based on known pattern 
    file_name = str(index) 
    dlfile(file_name,"wb",base_url 

Questo script è stato adattato da here

risposta

47

Ecco come mi occuperei della creazione e del download dell'URL. Mi sto assicurando di nominare il file come il nome base dell'URL (l'ultimo bit dopo la barra finale) e sto anche usando la clausola with per aprire il file in cui scrivere. Questo utilizza un ContextManager che è bello perché chiuderà quel file quando il blocco si chiude. Inoltre, utilizzo un modello per creare la stringa per l'url. urlopen non ha bisogno di un oggetto richiesta, solo una stringa.

import os 
from urllib2 import urlopen, URLError, HTTPError 


def dlfile(url): 
    # Open the url 
    try: 
     f = urlopen(url) 
     print "downloading " + url 

     # Open our local file for writing 
     with open(os.path.basename(url), "wb") as local_file: 
      local_file.write(f.read()) 

    #handle errors 
    except HTTPError, e: 
     print "HTTP Error:", e.code, url 
    except URLError, e: 
     print "URL Error:", e.reason, url 


def main(): 
    # Iterate over image ranges 
    for index in range(150, 151): 
     url = ("http://www.archive.org/download/" 
       "Cory_Doctorow_Podcast_%d/" 
       "Cory_Doctorow_Podcast_%d_64kb_mp3.zip" % 
       (index, index)) 
     dlfile(url) 

if __name__ == '__main__': 
    main() 
+0

funzionato come un campione. Grazie! – Justjoe

+0

Solo un'ultima domanda dove posso saperne di più sul "% d" utilizzato nella URL, io sono ancora un po 'abbozzato su come sta funzionando. – Justjoe

+0

Controlla la documentazione per la formattazione di stringhe: http://docs.python.org/library/stdtypes.html#string-formatting – dcolish

Problemi correlati