Что найти?

Скачивание файлов в 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, и в какой-то момент в будущем он может стать устаревшим. Из-за этого я бы не рекомендовал использовать его в пользу одного из методов ниже. Мы включили его сюда из-за его популярности в 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)

Открытый метод принимает два параметра: путь к локальному файлу и режим, в котором будут записаны данные. Здесь «wb» указывает, что открытый метод должен иметь разрешение на запись двоичных данных в данный файл.

Выполните приведенный выше сценарий и перейдите в каталог «Загрузки». Вы должны увидеть загруженный PDF-документ, как «cat2.jpg».

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

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

С помощью модуля запросов вы также можете легко получить соответствующие метаданные о своем запросе, включая код состояния, заголовки и многое другое. В приведенном выше сценарии вы можете увидеть, как мы получаем доступ к некоторым из этих метаданных.

То же самое касается дополнительных параметров, которые требуются для HTTP-запроса GET. Например, если вам нужно добавить заголовки клиентов, все, что вам нужно сделать, это создать dict с вашими заголовками и передать его в запрос на получение:

headers = {'user-agent': 'test-app/0.0.1'}
r = requests.get(url, headers=headers)

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

Один из самых простых способов загрузки файлов в Python – через модуль wget, который не требует открытия файла назначения. Метод загрузки модуля 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. Лично я предпочитаю использовать модуль requests для загрузки файлов из-за его простоты и мощности. Однако у вашего проекта могут быть ограничения, мешающие вам использовать сторонние библиотеки, и в этом случае я бы использовал модуль urllib2 (для Python 2) или модуль urllib.request (для Python 3).

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

This div height required for enabling the sticky sidebar