Jeśli mam adres URL, który po przesłaniu w przeglądarce internetowej, wyświetla okno dialogowe, w którym można zapisać plik zip ... w jaki sposób mogę pobrać i pobrać ten plik zip w Pyton?Python: Pobierz zwrócony plik Zip z adresu URL
Dzięki!
Jeśli mam adres URL, który po przesłaniu w przeglądarce internetowej, wyświetla okno dialogowe, w którym można zapisać plik zip ... w jaki sposób mogę pobrać i pobrać ten plik zip w Pyton?Python: Pobierz zwrócony plik Zip z adresu URL
Dzięki!
Użyj urllib2.urlopen
. Zwracaną wartością jest obiekt podobny do pliku, który można read()
, przekazać do zipfile
i tak dalej.
Albo użyć urllib2.urlopen, czy można spróbować przy użyciu doskonałą moduł Requests
i uniknąć urllib2 głowy:
import requests
results = requests.get('url')
#pass results.content onto secondary processing...
O ile mogę powiedzieć, właściwy sposób, aby to zrobić jest:
import requests, zipfile, StringIO
r = requests.get(zip_file_url, stream=True)
z = zipfile.ZipFile(StringIO.StringIO(r.content))
z.extractall()
oczywiście chcesz sprawdzić, czy GET powiodło się z r.ok
.
Dla Pythona 3+, pod modułem StringIO z modułem io i użyj BytesIO zamiast StringIO: Here są notatkami do wydania, które wspominają o tej zmianie.
import requests, zipfile, io
r = requests.get(zip_file_url)
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall()
Dziękuję za tę odpowiedź. Użyłem go do rozwiązania [mojego problemu z plikiem zip z prośbami] (http://stackoverflow.com/questions/36779870/python-requests-not-returning-same-header-as-browser-request-curl/36990934# 36990934). –
yoavram, w kodzie - gdzie wprowadzam adres URL strony? – newGIS
Jeśli chcesz zapisać pobrany plik w innej lokalizacji, zamień 'z.extractall()' na 'z.extractall ("/path/to/destination_directory ")' – user799188
Oto co mam do pracy w Pythonie 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()
Ale w jaki sposób analizować results.content int zip? – 0atman
Użyj modułu 'zipfile': ' zip = zipfile.ZipFile (results.content) '. Następnie analizuj pliki za pomocą 'ZipFile.namelist()', 'ZipFile.open()' lub 'ZipFile.extractall()' – aravenel