Eine verbesserte Version des PabloG-Codes für Python 2/3:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import ( division, absolute_import, print_function, unicode_literals )
import sys, os, tempfile, logging
if sys.version_info >= (3,):
import urllib.request as urllib2
import urllib.parse as urlparse
else:
import urllib2
import urlparse
def download_file(url, dest=None):
"""
Download and save a file specified by url to dest directory,
"""
u = urllib2.urlopen(url)
scheme, netloc, path, query, fragment = urlparse.urlsplit(url)
filename = os.path.basename(path)
if not filename:
filename = 'downloaded.file'
if dest:
filename = os.path.join(dest, filename)
with open(filename, 'wb') as f:
meta = u.info()
meta_func = meta.getheaders if hasattr(meta, 'getheaders') else meta.get_all
meta_length = meta_func("Content-Length")
file_size = None
if meta_length:
file_size = int(meta_length[0])
print("Downloading: {0} Bytes: {1}".format(url, file_size))
file_size_dl = 0
block_sz = 8192
while True:
buffer = u.read(block_sz)
if not buffer:
break
file_size_dl += len(buffer)
f.write(buffer)
status = "{0:16}".format(file_size_dl)
if file_size:
status += " [{0:6.2f}%]".format(file_size_dl * 100 / file_size)
status += chr(13)
print(status, end="")
print()
return filename
if __name__ == "__main__": # Only run if this file is called directly
print("Testing with 10MB download")
url = "http://download.thinkbroadband.com/10MB.zip"
filename = download_file(url)
print(filename)
0 Stimmen
Siehe auch: Wie kann ich mit Python ein Bild lokal speichern, dessen URL-Adresse ich bereits kenne?
2 Stimmen
Viele der nachstehenden Antworten sind kein zufriedenstellender Ersatz für
wget
. Unter anderem,wget
(1) bewahrt Zeitstempel (2) bestimmt automatisch den Dateinamen aus der URL und fügt ihn an.1
(usw.), wenn die Datei bereits existiert (3) hat viele andere Optionen, von denen Sie einige vielleicht in Ihrem.wgetrc
. Wenn Sie etwas davon wollen, müssen Sie es selbst in Python implementieren, aber es ist einfacher, einfach diewget
aus Python.3 Stimmen
Kurze Lösung für Python 3:
import urllib.request; s = urllib.request.urlopen('http://example.com/').read().decode()