httperror - ¿Cómo descargo un archivo zip en python usando urllib2?
urllib2 python 3 (2)
Así es como me ocuparía de la construcción y descarga de URL. Me estoy asegurando de nombrar el archivo como el nombre base de la url (el último bit después de la barra diagonal) y también estoy usando la cláusula with
para abrir el archivo para escribir. Esto utiliza un ContextManager que es bueno porque cerrará ese archivo cuando el bloque salga. Además, uso una plantilla para construir la cadena para la url. urlopen
no necesita un objeto de solicitud, solo una cadena.
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()
Pregunta de dos partes. Estoy intentando descargar varios podcasts archivados de Cory Doctorow desde el archivo de Internet. Los viejos que no entran en mi feed de iTunes. He escrito el guión pero los archivos descargados no están formateados correctamente.
Q1 - ¿Qué cambio para descargar los archivos zip mp3? P2: ¿Cuál es una mejor manera de pasar las variables a la 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
Este guión fue adaptado desde here
Una solución más antigua en SO a lo largo de las líneas de lo que desea: