Перейти к содержимому

Как скачать файл по ссылке python

  • автор:

Пишем программу для скачивания файлов на 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 @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

Как загружать файлы с 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.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. 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. » http.client.InvalidURL: URL can’t contain control characters. ‘/contentassets/413fc8748e5c4b95a2a8f2b99a274ce5/LN15_katalog_SM_SZFO_OMNI.pdf», «LN15_katalog_SM_SZFO_OMNI.pdf’ (found at least ‘ ‘)

    Добавить комментарий

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