Загрузка файлов с различных сетевых ресурсов - одна из наиболее важных и распространенных задач программирования, выполняемых в Интернете. Важность загрузки файлов может быть подчеркнута тем фактом, что огромное количество успешных приложений позволяет пользователям загружать файлы. Вот лишь несколько функций веб-приложений, требующих загрузки файлов:
- Обмен файлами
- Сбор данных
- Получение кода веб-сайта (CSS, JS и т. Д.)
- Социальные медиа
Это лишь некоторые из приложений, которые приходят на ум, но я уверен, что вы можете придумать гораздо больше. В этой статье мы рассмотрим некоторые из самых популярных способов загрузки файлов с помощью Python.
Использование модуля urllib.request
Модуль
urllib.request
используется для открытия или загрузки файла через HTTP. В частности,
urlretrieve
этого модуля - это то, что мы будем использовать для
фактического получения файла.
Чтобы использовать этот метод, вам необходимо передать два аргумента
urlretrieve
: первый аргумент - это URL-адрес ресурса, который вы
хотите получить, а второй аргумент - это путь к локальному файлу, в
котором вы хотите сохранить загруженный файл.
Давайте посмотрим на следующий пример:
import urllib.request
print('Beginning file download with urllib2...')
url = 'http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg'
urllib.request.urlretrieve(url, '/Users/scott/Downloads/cat.jpg')
В приведенном выше коде мы сначала импортируем модуль urllib.request
Затем мы создаем url
переменной, который содержит путь к загружаемому
файлу. Наконец, мы вызываем urlretrieve
и передаем ему url
в
качестве первого аргумента, «/Users/scott/Downloads/cat.jpg» в качестве
второго параметра для места назначения файла. Имейте в виду, что вы
можете передать любое имя файла в качестве второго параметра, и это
местоположение и имя, которое будет иметь ваш файл, при условии, что у
вас есть правильные разрешения.
Запустите указанный выше сценарий и перейдите в каталог «Загрузки». Вы должны увидеть загруженный файл с именем «cat.jpg».
Примечание . Этот urllib.request.urlretrieve
считается «устаревшим
интерфейсом» в Python 3, и в какой-то момент в будущем он может стать
устаревшим. Из-за этого я бы не рекомендовал использовать его в пользу
одного из методов ниже. Мы включили его сюда из-за его популярности в
Python 2.
Использование модуля urllib2
Другой способ загрузки файлов в Python - через модуль urllib2. urlopen
метод модуля urllib2 возвращает объект, содержащий данные файла. Чтобы
прочитать содержание
Обратите внимание, что в Python 3 urllib2
был объединен с urllib
как
urllib.request
и urllib.error
. Поэтому этот скрипт работает только
в Python 2.
import urllib2
filedata = urllib2.urlopen('http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg')
datatowrite = filedata.read()
with open('/Users/scott/Downloads/cat2.jpg', 'wb') as f:
f.write(datatowrite)
open
метод принимает два параметра: путь к локальному файлу и режим, в
котором будут записаны данные. Здесь «wb» указывает, что open
метод
должен иметь разрешение на запись двоичных данных в данный файл.
Выполните приведенный выше сценарий и перейдите в каталог «Загрузки». Вы должны увидеть загруженный PDF-документ как «cat2.jpg».
Использование модуля запроса
Вы также можете скачивать файлы с помощью модуля
запросов. Метод get
requests
используется для загрузки содержимого файла в двоичном
формате. Затем вы можете использовать open
чтобы открыть файл в вашей
системе, как и в предыдущем методе urllib2.urlopen
.
Взгляните на следующий сценарий:
import requests
print('Beginning file download with requests')
url = 'http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg'
r = requests.get(url)
with open('/Users/scott/Downloads/cat3.jpg', 'wb') as f:
f.write(r.content)
# Retrieve HTTP meta-data
print(r.status_code)
print(r.headers['content-type'])
print(r.encoding)
В приведенном выше сценарии open
снова используется для записи
двоичных данных в локальный файл. Если вы выполните приведенный выше
сценарий и перейдете в каталог «Загрузки», вы должны увидеть только что
загруженный файл JPG с именем «cat3.jpg».
С помощью requests
вы также можете легко получить соответствующие
метаданные о своем запросе, включая код состояния, заголовки и многое
другое. В приведенном выше сценарии вы можете увидеть, как мы получаем
доступ к некоторым из этих метаданных.
То же самое касается дополнительных параметров, которые требуются для
HTTP-запроса GET. Например, если вам нужно добавить заголовки клиентов,
все, что вам нужно сделать, это создать dict
со своими заголовками и
передать его в запрос на get
headers = {'user-agent': 'test-app/0.0.1'}
r = requests.get(url, headers=headers)
Есть тонны больше возможностей и функции этой библиотеки, поэтому проверить их большое руководство пользователя для получения дополнительной информации о том , как использовать его.
Использование модуля wget
Один из самых простых способов загрузки файлов в Python - через модуль
wget , который не требует открытия
файла назначения. Метод download
wget
загружает файлы всего в одну
строку. Метод принимает два параметра: URL-путь к файлу для загрузки и
локальный путь, по которому файл должен быть сохранен.
import wget
print('Beginning file download with wget module')
url = 'http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg'
wget.download(url, '/Users/scott/Downloads/cat4.jpg')
Выполните приведенный выше сценарий и перейдите в каталог «Загрузки». Здесь вы должны увидеть недавно загруженный файл «cat4.jpg».
Заключение
В этой статье мы представили четыре наиболее часто используемых метода
загрузки файлов на Python. Лично я предпочитаю использовать request
для загрузки файлов из-за его простоты и мощности. Однако у вашего
проекта могут быть ограничения, мешающие вам использовать сторонние
библиотеки, и в этом случае я бы использовал urllib2
(для Python 2)
или urllib.request
(для Python 3).
Какую библиотеку вы предпочитаете и почему? Дайте нам знать об этом в комментариях!