Пишем программу для скачивания файлов на Python с использованием requests
Недавно захотел написать программу для изучения библиотеки для Python — requests. Мой выбор пал на написание программы для скачивания файлов.
Поскольку мы будем использовать библиотеку requests, импортируем её (+shutil):
import requests, shutil
Код «меню» (это заключено в while True для возможности выхода break’ом и работы программы много раз без перезапуска):
menu = input("Ready.\n") if menu == "get": #режим загрузки #. if menu == "about": #о программе #. if menu == "exit": #выход #.
В get’е спрашиваем путь к файлу: (причём отдельно директорию и имя файла, зачем это нужно — скажу позже):
dirfile = input("Enter path to the directory with file(no \"www.\" !):") file = input("Enter the name of the file:")
А для requests ведь нужен полный путь! Не беда, склеим dirfile и file:
fullpath = dirfile + file
Иногда, чтобы скачать файл, нужно войти. Это нужно реализовать!
Спросим пользователя об этом:
reqauthstr = input("Do you need authentification?[y/n]:") while True: if reqauthstr == "y" or reqauthstr == "Y": reqauth = True break elif reqauthstr == "n" or reqauthstr == "N": reqauth = False break else: print("Incorrect command.")
Если нужно входить, тогда напишем запрос с аутентификацией. Спрашиваем логин и пароль:
if reqauth == True: user = input("Login:") passw = input("Password:")
Создаём сам get-запрос:
filereq = requests.get(fullpath,stream = True,auth=(user,passw))
И копируем файл (как раз, разделение пригодилось в open`e):
with open(file,"wb") as receive: shutil.copyfileobj(filereq.raw,receive) del filereq
Без аутентификации — практически тоже самое:
elif reqauth == False: filereq = requests.get(fullpath,stream = True) with open(file,"wb") as receive: shutil.copyfileobj(filereq.raw,receive) del filereq
Ну вот, закачку реализовали.
Остальные пункты меню:
if menu == "exit": break if menu == "about": print(""" \nxfetch - v0.1.0 Library: requests - v2.6.0 Author: Fedor Sturov\n """) else: print("Incorrect command.\n")
- Интернет
- Python
- requests
- скачивание
- скачивание контента
- Python 3
- скачивание файла
- программирование
- на
- программирование на Python 3
- Python
- Программирование
Как скачать файл через ссылку на Python?
Есть сайт с файлами но там ссылки для скачивания файла необычные(не заканчивается с .apk )
Пример: https://s2020-05.androeed.ru/get_file.php?url=YUhS. (Сократил)
Если нажать то скачивается файл а если через requests не работает. Я подумал можно использовать селениум для браузер но оно будет ли запускаться на vps раньше я как то работал с селениум и когда залил на впс скрипт выдавал ошибку связано с монитором. Как я могу решить это?
- Вопрос задан более двух лет назад
- 974 просмотра
Комментировать
Решения вопроса 1

ScriptKiddo @ScriptKiddo
URL — это base64
YUhSMGNITTZMeTl6TWpBeU1DMHdOUzVoYm1SeWIyVmxaQzV5ZFM5bWFXeGxjeTh5TURJeEx6RXlMekkzTDNSeVlXWm1hV05qYjNBelpDMHhOalF3TlRZNU9UZ3hMWGQzZHk1aGJtUnliMlZsWkM1eWRTNWhjR3M9fDE2NDExMzg0MjN8MzA=
aHR0cHM6Ly9zMjAyMC0wNS5hbmRyb2VlZC5ydS9maWxlcy8yMDIxLzEyLzI3L3RyYWZmaWNjb3AzZC0xNjQwNTY5OTgxLXd3dy5hbmRyb2VlZC5ydS5hcGs=|1641138423|30
Внутри — base64 прямой ссылки на скачивание, timestamp и время действия ссылки
https://s2020-05.androeed.ru/files/2021/12/27/trafficcop3d-1640569981-www.androeed.ru.apk
Как загружать файлы с URL-адреса в Python

Загрузка файлов из сети является одной из наиболее распространенных ежедневных задач, выполняемых в Интернете. Это важно в связи с тем, что многие успешные программы позволяют своим пользователям загружать файлы из Интернета.
В сегодняшней статье мы рассмотрим, как использовать библиотеки requests и tqdm для создания загрузчика файлов с индикатором выполнения с использованием Python.
Начнем с создания изолированной среды, куда установим все необходимое через командную строку:
# windows
# для python 3 и выше
>>>python -m venv my_folder
# активируем ее
>>>cd my_folder/Scripts
>>>activate
# вывод
>>> (my_folder) C:\Users\УЗИ\Desktop\my_folder\Scripts>
# среда активирована, теперь установим библиотеки requests и tqdm
>>>pip3 install requests tqdm
Модуль tqdm здесь используется просто для создания красивого индикатора в консоли.
Откройте новый файл Python и импортируйте:
from tqdm import tqdm
import requests
import cgi
import sys
# URL адрес будет передаваться через командную строку
Далее, для загрузки контента с интернета мы используем метод requests.get(). Но есть одна проблема, так как данный метод загружает информацию целиком, что может перегрузить память. К счастью для нас, у метода get есть параметр stream, которому можно присвоить True. Что позволит загружать информацию частями.
# установим значение в 1024 байт за один раз
buffer_size = 1024
# загрузка тела ответа по кускам
response = requests.get(url, stream=True)
Теперь не только заголовок ответа загружен и соединение осталось открытым, также есть возможность управлять рабочим процессом с помощью метода iter_content(). Но перед тем как продемонстрировать указанное в действии, мы должны извлечь название файла и его общий размер.
# получим размер файла
file_size = int(response.headers.get(«Content-Length», 0))
# получим имя файла
default_filename = url.split(«/»)[-1]
# получим заголовок content disposition, обозначающий что файл #предназначен для скачивания
content_disposition = response.headers.get(«Content-Disposition»)
# если данный элемент существует
if content_disposition:
# разбираем заголовок с помощью cgi
value, params = cgi.parse_header(content_disposition)
# извлекаем имя файла из content disposition
filename = params.get(«filename», default_filename)
else:
# если же content dispotion не доступен то используем имя из url
filename = default_filename
Мы получаем размер файла в байтах из заголовка ответа Content-Length, мы также получаем имя файла в заголовке Content-Disposition, но нам нужно проанализировать его с помощью функции cgi.parse_header().
Давайте скачаем файл прямо сейчас:
# индикатор выполнения отражает количество загруженных байт
progress = tqdm(response.iter_content(buffer_size), f»Загрузка «, total=file_size, unit=»B», unit_scale=True, unit_divisor=1024)
with open(filename, «wb») as f:
for data in progress.iterable:
# запись данных прочитанных из файла
f.write(data)
# update the progress bar manually
progress.update(len(data))
>>>python download_indicator.py https://download.virtualbox.org/virtualbox/6.1.18/VirtualBox-6.1.18-142142-Win.exe
# Расширения файлов должны оканчиваться на .exe, .pdf, etc.

В результате в каталоге с запущенным скриптом будет установлен VirtualBox. Таким образом, с помощью Python и библиотек requests и tqdm мы установили виртуальную машину.

![]()
Создано 04.01.2022 11:50:26
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2024 Русаков Михаил Юрьевич. Все права защищены.
Как скачать файл с помощью Python?
url = ‘lenta.com/contentassets/413fc8748e5c4b95a2a8f2b99a274ce5/…», «LN15_katalog_SM_SZFO_OMNI.pdf’ import urllib urllib.urlretrieve(url, «tutorial.pdf») import requests r = requests.get(url) with open(«tutorial1.pdf», «wb») as code: code.write(r.content)
24 июл 2020 в 8:03
@Валера код в сам вопрос, а не в комментарии, с соответствующим форматированием. А чтобы обратиться к конкретному участнику, указывайте собаку + его ник — так он получит уведомление о сообщении
24 июл 2020 в 8:05
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
pip3 install wget
import wget wget.download('https://lenta.com/contentassets/413fc8748e5c4b95a2a8f2b99a274ce5/LN15_katalog_SM_SZFO_OMNI.pdf')
Отслеживать
ответ дан 24 июл 2020 в 10:36
USERNAME GOES HERE USERNAME GOES HERE
10.4k 21 21 золотой знак 25 25 серебряных знаков 53 53 бронзовых знака
import urllib.request destination = 'название файла' url = 'ссылка' urllib.request.urlretrieve(url, destination)
Он будет лежать в папке с проектом
Отслеживать
ответ дан 24 июл 2020 в 8:05
LeonidPetrovich LeonidPetrovich
136 10 10 бронзовых знаков
AttributeError: module ‘urllib’ has no attribute ‘urlretrieve’
24 июл 2020 в 8:07
@Валера Внёс изменения в код , посмотрите
24 июл 2020 в 8:09
raise InvalidURL(f»URL can’t contain control characters.