Descarga y descomprime el archivo con Python

Estoy tratando de descargar y abrir un archivo comprimido y parece que tengo problemas para usar un identificador de tipo de archivo con un archivo zip. Recibo el error “AttributeError: la instancia de addinfourl no tiene ningún atributo ‘buscar'” al ejecutar esto:

import zipfile import urllib2 def download(url,directory,name): webfile = urllib2.urlopen('http://www.sec.gov'+url) webfile2 = zipfile.ZipFile(webfile) content = zipfile.ZipFile.open(webfile2).read() localfile = open(directory+name, 'w') localfile.write(content) localfile.close() return() download(link.get("href"),'./fails_data', link.text) 

No se puede buscar en un archivo ed urllib2.urlopen . Los métodos que admite se enumeran aquí: http://docs.python.org/library/urllib.html#urllib.urlopen .

Tendrá que recuperar el archivo (posiblemente con urllib.urlretrieve , http://docs.python.org/library/urllib.html#urllib.urlretrieve ), luego usar el zipfile en él.

Alternativamente, puede read() el archivo urlopen ed, luego ponerlo en un StringIO , y luego usar el zipfile en ese zipfile , si desea tener los datos comprimidos en la memoria. También revise los métodos extract y todos los métodos de zipfile si solo desea extraer el archivo, en lugar de usar read .

Poniendo las cosas juntas, lo siguiente recupera el contenido del primer archivo dentro de un archivo comprimido de un sitio web:

 import urllib import zipfile url = 'http://www.gutenberg.lib.md.us/4/8/8/2/48824/48824-8.zip' filehandle, _ = urllib.urlretrieve(url) zip_file_object = zipfile.ZipFile(filehandle, 'r') first_file = zip_file_object.namelist()[0] file = zip_file_object.open(first_file) content = file.read()