Nếu tôi có URL, khi được gửi trong trình duyệt web, hãy bật hộp thoại để lưu tệp zip ... làm cách nào để tôi bắt và tải xuống tệp zip này trong Python?Python: Tải xuống tệp Zip được trả về từ URL
Cảm ơn!
Nếu tôi có URL, khi được gửi trong trình duyệt web, hãy bật hộp thoại để lưu tệp zip ... làm cách nào để tôi bắt và tải xuống tệp zip này trong Python?Python: Tải xuống tệp Zip được trả về từ URL
Cảm ơn!
Sử dụng urllib2.urlopen
. Giá trị trả lại là một đối tượng giống như tệp mà bạn có thể read()
, chuyển đến zipfile
và cứ tiếp tục như vậy.
Hoặc sử dụng urllib2.urlopen, hoặc bạn có thể thử bằng cách sử dụng mô-đun Requests
tuyệt vời và tránh đau đầu urllib2:
import requests
results = requests.get('url')
#pass results.content onto secondary processing...
Theo như tôi có thể nói, những cách thích hợp để làm điều này là:
import requests, zipfile, StringIO
r = requests.get(zip_file_url, stream=True)
z = zipfile.ZipFile(StringIO.StringIO(r.content))
z.extractall()
tất nhiên bạn muốn kiểm tra xem GET đã thành công với r.ok
hay chưa.
Đối với python 3+, hãy đặt mô-đun StringIO với mô-đun io và sử dụng BytesIO thay vì StringIO: Here là ghi chú phát hành đề cập đến thay đổi này.
import requests, zipfile, io
r = requests.get(zip_file_url)
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall()
Cảm ơn câu trả lời này. Tôi đã sử dụng nó để giải quyết [vấn đề của tôi nhận được tệp zip có yêu cầu] (http://stackoverflow.com/questions/36779870/python-requests-not-returning-same-header-as-browser-request-curl/36990934# 36990934). –
yoavram, trong mã của bạn - nơi tôi nhập url của trang web? – newGIS
Nếu bạn muốn lưu tệp đã tải xuống ở một vị trí khác, thay thế 'z.extractall()' bằng 'z.extractall ("/path/to/destination_directory ")' – user799188
Đây là những gì tôi đã làm việc trong 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()
Nhưng làm thế nào để bạn phân tích results.content int a zip? – 0atman
Sử dụng mô-đun 'zipfile': ' zip = zipfile.ZipFile (results.content) '. Sau đó, chỉ phân tích cú pháp các tệp bằng cách sử dụng 'ZipFile.namelist()', 'ZipFile.open()', hoặc 'ZipFile.extractall()' – aravenel