2012-02-23 14 views

cevap

3

Ya urllib2.urlopen kullanabilir veya mükemmel Requests modülü kullanarak denemek ve urllib2 baş ağrıları önlemek olabilir:

import requests 
results = requests.get('url') 
#pass results.content onto secondary processing... 
+0

Ama nasıl ayrıştırmak results.content int bir zip? – 0atman

+0

'zipfile' modülünü kullanın: ' zip = zipfile.ZipFile (results.content) '. Ardından, dosyaları "ZipFile.namelist()", "ZipFile.open()" veya "ZipFile.extractall()" – aravenel

66

Bildiğim kadarıyla söyleyebilirim, bunu yapmak için uygun yolu olduğunu:

import requests, zipfile, StringIO 
r = requests.get(zip_file_url, stream=True) 
z = zipfile.ZipFile(StringIO.StringIO(r.content)) 
z.extractall() 

Tabi ki, GET'in r.ok ile başarılı olduğunu kontrol etmek istersiniz.

Python 3+ için, String123 modülünü io modülüyle doldurun ve StringIO: Here yerine BytesIO kullanın, bu değişikliği belirten sürüm notlarıdır.

import requests, zipfile, io 
r = requests.get(zip_file_url) 
z = zipfile.ZipFile(io.BytesIO(r.content)) 
z.extractall() 
+0

) kullanarak çözümleyin. Bu yanıt için teşekkürler. Ben [sorunu ile bir zip dosyası alma konusunu] çözmek için kullandım (http://stackoverflow.com/questions/36779870/python-requests-not-returning-same-header-as-browser-request-curl/36990934# 36.990.934). –

+0

yoavram, kod sayfanızda web sayfasının URL'sini giriyorum? – newGIS

+4

İndirilen dosyayı farklı bir konuma kaydetmek isterseniz, 'z.extractall()' i 'z.extractall ("/yol/to/destination_directory ") ile değiştirin. – user799188

0

Burada Python 3 çalışmak ne var:

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() 
İlgili konular