Как скачать файл с помощью 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.
Как загружать файлы с 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?
Есть сайт с файлами но там ссылки для скачивания файла необычные(не заканчивается с .apk )
Пример: https://s2020-05.androeed.ru/get_file.php?url=YUhS. (Сократил)
Если нажать то скачивается файл а если через requests не работает. Я подумал можно использовать селениум для браузер но оно будет ли запускаться на vps раньше я как то работал с селениум и когда залил на впс скрипт выдавал ошибку связано с монитором. Как я могу решить это?
- Вопрос задан более двух лет назад
- 1039 просмотров
Комментировать
Решения вопроса 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
Скачать pdf файл по ссылке на скачивание в python?
Есть ссылка https://www.cian.ru/export/pdf/rent/flat/262482762/ . Если перейти по ней, то откроется страница, которая запустит скачку пдф файла и страница мгновенно закроется. Есть ли способ скачать этот файл в нужную папку через python?
Пытался отправить get запрос с помощью библиотеки requests, выдаёт только response 200, файл при этом не скачивается.
- Вопрос задан более двух лет назад
- 1075 просмотров
Комментировать
Решения вопроса 1

soremix @SoreMix Куратор тега Python
Пытался отправить get запрос с помощью библиотеки requests, выдаёт только response 200, файл при этом не скачивается.
Вы же прочитали содержимое ответа и попытались записать его в файл?
r = requests.get('https://www.cian.ru/export/pdf/rent/flat/262482762/') with open('file.pdf', 'wb') as f: f.write(r.content)
Ответ написан более двух лет назад
Нравится 1 13 комментариев
senks @senks Автор вопроса
Пытался.
«Не удалось отрыть файл, т.к. формат файла не поддерживается или файл был повреждён»
senks, Это не PDF файл, а HTML документ с капчей.

AVKor, с чего вы это взяли? по ссылке — именно PDF, даже wget-ом скачивается.
ТС, поди, «w» вместо «wb» написал — вот и покалечил содержимое.
Впрочем, сайт может быть за защитой от DDoS — это она подсовывает недоверенным сетям капчу.
senks @senks Автор вопроса
Adamos, нет, в файл сохраняется html

senks, у меня — PDF на четыре страницы, без всяких капч.
Но я и не пытаюсь скриптами выкачивать инфу с защищенных от спамеров сайтов.
senks @senks Автор вопроса
Adamos, pdf файл не открывается на этой странице, поэтому в файл записывается не он. Что ж, придётся использовать селениум.
с чего вы это взяли?
С того, что я проделал написанное в ответе.
$ file file.pdf file.pdf: HTML document, UTF-8 Unicode text, with very long lines
И посмотрел внутрь.
даже wget-ом скачивается
Это ни о чём не говорит.

AVKor, это говорит о том, что сайт отдает разный ответ разным пользователям. Скорее всего — по айпишнику.
Скорее всего — по айпишнику.
Скорее всего — нет.
Я проделал это у себя на ПК с российским IP и с ВПСки в американском дата-центре. Результат идентичный. HTML.

AVKor, если ваш российский IP принадлежит опсосам, а VPS-ка в облаке, где можно дешево забубенить себе VPN — ничего удивительного, что на то и другое защита делает стойку.
Повторюсь, я ткнулся браузером в ссылку — стал скачиваться файл. При том, что на ЦИАНе я сто лет не бывал и никаких идентифицирующих кук в запросе не передавалось (я проверил).
Ткнулся туда же wget-ом — получил файл. Wget обозвал его index.html, но внутри была корректная PDF, evince ее открыл без всяких возражений и показал все четыре страницы.
Adamos, Ну и что дальше-то? Зависимость от IP, вами предлагаемая, не особо подтверждается. Или следует предположить, что у меня пара IP (весьма, мягко говоря, разных, была заблокирована).
Adamos, ваша версия опровергнута:
$ wget https://www.cian.ru/export/pdf/rent/flat/262482762/ $ file index.html index.html: PDF document, version 1.4
(качал с того же ПК, что и Пайтоном по ответу выше, потом то же самое проделал на ВПСке, результат тот же — успешный).

soremix @SoreMix Куратор тега Python

Ну лично у меня PDF выгрузился, именно тем кодом из ответа, я же тоже не просто так ляпаю.
Что и правда есть — так это зависимость от трейлинг слеша. Учитывая сайт, там и вполне IP блоки могут быть. Курлом так же прекрасно загружается.