2012-02-23 11 views

Odpowiedz

3

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... 
+0

Ale w jaki sposób analizować results.content int zip? – 0atman

+0

Użyj modułu 'zipfile': ' zip = zipfile.ZipFile (results.content) '. Następnie analizuj pliki za pomocą 'ZipFile.namelist()', 'ZipFile.open()' lub 'ZipFile.extractall()' – aravenel

66

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() 
+0

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). –

+0

yoavram, w kodzie - gdzie wprowadzam adres URL strony? – newGIS

+4

Jeśli chcesz zapisać pobrany plik w innej lokalizacji, zamień 'z.extractall()' na 'z.extractall ("/path/to/destination_directory ")' – user799188

0

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() 
Powiązane problemy