Python запрашивает файл загрузки

Могу ли я стать полноценным разработчиком Python Программирование и разработка

«Библиотека Python Requests — одна из самых универсальных и ценных библиотек в экосистеме Python. Его функции и невероятная простота делают его полезным для поддержки многочисленных приложений Python».

Этот учебник научит нас, как загрузить файл с заданного URL-адреса с помощью пакета запросов.

Установка и настройка

Прежде чем использовать метод запросов, вы должны убедиться, что он установлен в вашей среде. Вы можете сделать это, запустив команду pip, как показано ниже:

sudo pip install requests

или же

sudo pip3 install requests

В Windows вы можете запустить команду:

python -m pip install requests

Если у вас установлен conda, выполните команду:

conda install -c anaconda requests

Пример 1. Загрузка простого файла

Мы можем загрузить файл с помощью модуля запросов, указав URL-адрес файла и используя файловый модуль Python для записи содержимого в файл с заданным именем.

Пример иллюстрации показан ниже:

touch ~/download_image.py

Отредактируйте файл и добавьте код:

vim ~/download_image.py
import requests
url = ‘https://upload.wikimedia.org/wikipedia/commons/a/af/Tux.png’
r = requests.get(url, allow_redirects=True)
with open(‘tux.png’‘wb’) as f:
f.write(r.content)

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

В третьей строке мы создаем объект ответа HTTP и делаем запрос GET на указанный URL. Мы также устанавливаем для параметра allow_redirects значение True, чтобы разрешить клиенту следовать перенаправлениям (если они есть). Затем объект ответа сохраняется в переменной с именем r.

Наконец, сохраните полученный объект в файл как tux.png в двоичном режиме.

Затем вы можете проверить каталог, в котором находится скрипт, на наличие файла tux.png.

Пример 2. Загрузка больших файлов

В приведенном выше примере мы используем функцию r.content, которая сохраняет файл в виде строки. Это удобно при загрузке небольших файлов. Однако при загрузке больших файлов функция не справится с записью запрошенных данных сразу.

Чтобы решить эту проблему, нам нужно загрузить файл в виде потоков. Следовательно, мы можем использовать функцию r.iter_content и установить для параметра потока значение true.

Это связано с тем, что использование функции r.content() с параметром потока, равным true, будет только держать соединение и ответ открытыми, а не читать указанный файл.

Функция r.iter_content позволяет решить эту проблему.

Пример показан ниже:

import requests
url = «https://hastie.su.domains/ISLR2/ISLRv2_website.pdf»
r = requests.get(url, allow_redirects=True, stream=True)
with open(‘ISLRv2.pdf’‘wb’) as file:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
file.write(chunk)

В приведенном выше коде используется цикл for для записи фрагментов данных (каждый по 1024 байта) в указанный файл.

Пример 3. Проверка типа файла перед загрузкой

Мы можем проверить тип контента, полученного из заголовков. Затем мы можем использовать это значение, чтобы проверить правильность файла, который мы хотим загрузить.

Например, если мы хотим загрузить iso-файл и получить HTML или текстовый тип, мы знаем, что это неправильный файл, и закрываем соединение.

Пример кода показан ниже:

import requests
url = «https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/debian-11.4.0-amd64-DVD-1.iso»
r = requests.get(url, allow_redirects=True, stream=True)
h = requests.head(url, allow_redirects=True)
header = h.headers
content_type = header.get(‘content-type’)
if ‘html’ in content_type.lower():
r.close()
print(«Incorrect file type»)
if ‘text’ in content_type().lower():
r.close()
print(«Incorrect file type»)
else:
with open(‘ISLRv2.iso’‘wb’) as file:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
file.write(chunk)

Заключение

В этой статье вы узнали, как загрузить файл с помощью модуля запросов Python. Вы также узнали, как загружать большие файлы.

Читайте также:  Как скопировать текст в буфер обмена в Next.js?
Оцените статью
bestprogrammer.ru
Добавить комментарий