Рубрики
Без рубрики

Загрузка файлов с помощью Python

Автор оригинала: Scott Robinson.

Загрузка файлов с помощью Python

Загрузка файлов с различных интернет-ресурсов-одна из самых важных и распространенных задач программирования в Интернете. Важность загрузки файлов может быть подчеркнута тем фактом, что огромное количество успешных приложений позволяют пользователям загружать файлы. Вот лишь несколько функций веб-приложения, которые требуют загрузки файлов:

  • Общий доступ к файлам
  • Интеллектуальный анализ данных
  • Получение кода веб-сайта (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, и в какой-то момент в будущем он может устареть. Из-за этого я бы не рекомендовал использовать его в пользу одного из приведенных ниже методов. Мы включили его сюда из-за популярности is в Python 2.

Использование модуля urllib2

Другой способ загрузки файлов в Python – через модуль urllib2. Метод urlopen модуля urllib2 возвращает объект, содержащий файловые данные. Чтобы ознакомиться с содержанием

Обратите внимание, что в Python 3/| urllib2 был объединен в urllib as 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”

Использование модуля запроса

Вы также можете загружать файлы с помощью модуля requests . Метод get модуля requests используется для загрузки содержимого файла в двоичном формате. Затем вы можете использовать метод open для открытия файла в вашей системе, как и в предыдущем методе, urllib2.urlopen .

Вы также можете загружать файлы с помощью модуля || requests||. Метод || 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).

Какую библиотеку вы предпочитаете и почему? Дайте нам знать в комментариях!