#python #urllib
Подскажите, пожалуйста, как скачать файл средствами python (urllib) доступный по http и положить его рядом со скриптом?
Ответы
Ответ 1
urllib -> urlopen - открывает файл по данной ему ссылке для чтения, далее можете его просто считать read(), открыть файл для бинарной записи, и записать в него то что прочитали по http. Пример скачивания эмблемки: import urllib logo = urllib.urlopen("http://www.google.com/images/srpr/logo3w.png").read() f = open("logo3w.png", "wb") f.write(logo) f.close() Также есть urllib.urlretrieve(url, [filname,[...]]) - по моему его предназначение именно для скачивания. import urllib destination = 'logo3w.png' url = 'http://www.google.com/images/srpr/logo3w.png' urllib.urlretrieve(url, destination)Ответ 2
#!/usr/bin/env python3 from urllib.request import urlretrieve url = 'http://www.bing.com/az/hprichbg?p=rb/CollaredLorys_ROW927887560.jpg' destination = url.rsplit('/',1)[1] urlretrieve(url, destination) Чтобы сохранить читаемые русские имена, можно использовать более сложный способ вычисления имени файла url2filename(): #!/usr/bin/env python # -*- coding: utf-8 -*- import os import posixpath try: from urlparse import urlsplit from urllib import unquote except ImportError: # Python 3 from urllib.parse import urlsplit, unquote def url2filename(url): """Return basename corresponding to url. >>> print(url2filename('http://example.com/path/to/file%C3%80?opt=1')) fileÀ >>> print(url2filename('http://example.com/slash%2fname')) # '/' in name Traceback (most recent call last): ... ValueError """ urlpath = urlsplit(url).path basename = posixpath.basename(unquote(urlpath)) if (os.path.basename(basename) != basename or unquote(posixpath.basename(urlpath)) != basename): raise ValueError # reject '%2f' or 'dir%5Cbasename.ext' on Windows return basename Пример: local_filename, headers = urlretieve(url, url2filename(url))Ответ 3
urllib.urlrertieve(url, filename)Ответ 4
destination = url.rsplit('/',1)[1] - Здесь один момент не учтен, если url заканчивается на / то destination это пустая строка. Можно лимит поставить 2 и проверять длину. Пример: destination = url.rsplit('/',1)[2] if len(destination) == 0: destination = url.rsplit('/',1)[1]Ответ 5
Отвечу для версии python3, будет так: import urllib.request logo = urllib.request.urlopen("http://www.marseille-tourisme.com/fileadmin/user_upload/plan_mars2013.jpg").read() f = open("plan_mars2013.jpg", "wb") f.write(logo) f.close()Ответ 6
ответ в две строки) import urllib.request, urllib.parse, urllib.error urllib.request.urlretrieve('http://откуда_качаем.ком', './ложим_в_текущаю_папку')
Комментариев нет:
Отправить комментарий