Русские Блоги
Роль и использование метода urlretrieve () в python3 (начало работы)
Функция urlretrieve (), предоставляемая модулем urllib.request в Python3. Метод urlretrieve () загружает удаленные данные напрямую в локальные.
urlretrieve(url, filename=None, reporthook=None, data=None)
- URL параметра: адрес ссылки для скачивания
- Имя файла параметра: указывает локальный путь для сохранения (если параметр не указан, urllib создаст временный файл для сохранения данных.)
- Параметр reporthook: это функция обратного вызова, которая запускается, когда сервер подключен и передается соответствующий блок данных. Мы можем использовать эту функцию обратного вызова для отображения текущего прогресса загрузки.
- Параметр data: относится к данным почтового сервера. Этот метод возвращает кортеж (имя файла, заголовки), содержащий два элемента: Filename представляет путь, сохраненный в локальной сети, а header представляет заголовок ответа сервера.
Возьмите html-файл Baidu на локальный компьютер, сохраните его в файле «./baidu.html» и одновременно просмотрите ход загрузки.
#!/usr/bin/env python # coding=utf-8 import os from urllib.request import urlretrieve def cbk(a,b,c): '' '' 'Функция обратного вызова @a: уже загруженный блок данных @b: размер блока данных @c: размер удаленного файла ''' per=100.0*a*b/c if per>100: per=100 print('%.2f%%' % per) url='http://www.baidu.com' dir=os.path.abspath('.') work_path=os.path.join(dir,'baidu.html') urlretrieve(url,work_path,cbk)
Ниже приведен пример загрузки файла urlretrieve (), который может показать ход загрузки.
#!/usr/bin/env python # coding=utf-8 import os import urllib def cbk(a,b,c): '' 'Функция обратного вызова @a: уже загруженный блок данных @b: размер блока данных @c: размер удаленного файла ''' per=100.0*a*b/c if per>100: per=100 print '%.2f%%' % per url='http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2' dir=os.path.abspath('.') work_path=os.path.join(dir,'Python-2.7.5.tar.bz2') urllib.urlretrieve(url,work_path,cbk)
Загрузите набор данных cifar-10 в качестве примера, чтобы понять использование urlretrieve
Возьмите набор данных cifar-10 в качестве примера, чтобы понять использование urlretrieve:
from urllib.request import urlretrieve import os def download(url, savepath='./'): """ download file from internet :param url: path to download from :param savepath: path to save files :return: None """ def reporthook(a, b, c): """ Показать прогресс загрузки : param a: загруженный блок данных : параметр b: размер блока данных : param c: размер удаленного файла :return: None """ print("\rdownloading: %5.1f%%" % (a * b * 100.0 / c), end="") filename = os.path.basename(url) # Определить, существует ли файл и загрузить, если он не существует if not os.path.isfile(os.path.join(savepath, filename)): print('Downloading data from %s' % url) urlretrieve(url, os.path.join(savepath, filename), reporthook=reporthook) print('\nDownload finished!') else: print('File already exsits!') # Получить размер файла filesize = os.path.getsize(os.path.join(savepath, filename)) # Размер файла по умолчанию в байтах, конвертируется в Мб print('File size = %.2f Mb' % (filesize/1024/1024)) if __name__ == '__main__': # Взять в качестве примера набор данных cifar-10 url = "https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz" download(url, savepath='./')
Если в указанной папке нет файлов для загрузки, выполните загрузку:
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz downloading: 100.0% Download finished! File size = 162.60 Mb
Если файл с таким именем уже существует в указанной папке, загрузка не выполняется:
File already exsits! File size = 162.60 Mb
urlopen () может легко получить информацию об удаленной html-странице, а затемPythonРегулярно анализируйте необходимые данные, сопоставляйте нужные данные и затем используйте urlretrieve () для локальной загрузки данных. Для удаленных URL-адресов с ограниченным доступом или ограниченным подключением вы можете использовать прокси-соединение (режим прокси). Если объем данных удаленного подключения слишком велик, а однопоточная загрузка слишком медленная, вы можете использовать многопоточную загрузку. Это легендарный искатель