Se ho un URL che, quando inviato in un browser Web, apre una finestra di dialogo per salvare un file zip ... come farei per catturare e scaricare questo file zip in Pitone?Python: Scarica il file Zip rinviato dall'URL
Grazie!
Se ho un URL che, quando inviato in un browser Web, apre una finestra di dialogo per salvare un file zip ... come farei per catturare e scaricare questo file zip in Pitone?Python: Scarica il file Zip rinviato dall'URL
Grazie!
Utilizzare urllib2.urlopen
. Il valore restituito è un oggetto simile a un file che è possibile read()
, passare a zipfile
e così via.
usare sia urllib2.urlopen, o si potrebbe provare a utilizzare l'ottimo modulo Requests
ed evitare urllib2 mal di testa:
import requests
results = requests.get('url')
#pass results.content onto secondary processing...
Per quanto posso dire, il modo corretto per farlo è:
import requests, zipfile, StringIO
r = requests.get(zip_file_url, stream=True)
z = zipfile.ZipFile(StringIO.StringIO(r.content))
z.extractall()
ovviamente vorrete verificare che GET abbia avuto successo con r.ok
.
Per python 3+, sottoporre il modulo StringIO al modulo io e utilizzare BytesIO invece di StringIO: Here sono note di rilascio che menzionano questa modifica.
import requests, zipfile, io
r = requests.get(zip_file_url)
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall()
Grazie per questa risposta. L'ho usato per risolvere [il mio problema ottenere un file zip con richieste] (http://stackoverflow.com/questions/36779870/python-requests-not-returning-same-header-as-browser-request-curl/36990934# 36.990.934). –
yoavram, nel tuo codice- dove inserisco l'url della pagina web? – newGIS
Se si desidera salvare il file scaricato in una posizione diversa, sostituire 'z.extractall()' con 'z.extractall ("/percorso/a/destinazione_directory ")' – user799188
Ecco quello che ho avuto modo di lavorare in Python 3:
import zipfile, urllib.request, shutil
url = 'http://www....myzipfile.zip'
file_name = 'myzip.zip'
with urllib.request.urlopen(url) as response, open(file_name, 'wb') as out_file:
shutil.copyfileobj(response, out_file)
with zipfile.ZipFile(file_name) as zf:
zf.extractall()
Ma come si analizza results.content int a zip? – 0atman
Usa il modulo 'zipfile': ' zip = zipfile.ZipFile (results.content) '. Quindi basta analizzare i file usando 'ZipFile.namelist()', 'ZipFile.open()', o 'ZipFile.extractall()' – aravenel