Как скачать файл по ссылке python
Перейти к содержимому

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

  • автор:

Как скачать файл с помощью 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 ‘ ‘)

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

    Есть сайт с файлами но там ссылки для скачивания файла необычные(не заканчивается с .apk )
    Пример: https://s2020-05.androeed.ru/get_file.php?url=YUhS. (Сократил)
    Если нажать то скачивается файл а если через requests не работает. Я подумал можно использовать селениум для браузер но оно будет ли запускаться на vps раньше я как то работал с селениум и когда залил на впс скрипт выдавал ошибку связано с монитором. Как я могу решить это?

    • Вопрос задан более двух лет назад
    • 1039 просмотров

    Комментировать
    Решения вопроса 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

    Скачать pdf файл по ссылке на скачивание в python?

    Есть ссылка https://www.cian.ru/export/pdf/rent/flat/262482762/ . Если перейти по ней, то откроется страница, которая запустит скачку пдф файла и страница мгновенно закроется. Есть ли способ скачать этот файл в нужную папку через python?
    Пытался отправить get запрос с помощью библиотеки requests, выдаёт только response 200, файл при этом не скачивается.

    • Вопрос задан более двух лет назад
    • 1075 просмотров

    Комментировать
    Решения вопроса 1

    SoreMix

    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 документ с капчей.

    Adamos

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

    senks @senks Автор вопроса
    Adamos, нет, в файл сохраняется html

    Adamos

    senks, у меня — PDF на четыре страницы, без всяких капч.
    Но я и не пытаюсь скриптами выкачивать инфу с защищенных от спамеров сайтов.

    senks @senks Автор вопроса

    Adamos, pdf файл не открывается на этой странице, поэтому в файл записывается не он. Что ж, придётся использовать селениум.

    с чего вы это взяли?

    С того, что я проделал написанное в ответе.

    $ file file.pdf file.pdf: HTML document, UTF-8 Unicode text, with very long lines

    И посмотрел внутрь.

    даже wget-ом скачивается

    Это ни о чём не говорит.

    Adamos

    AVKor, это говорит о том, что сайт отдает разный ответ разным пользователям. Скорее всего — по айпишнику.

    Скорее всего — по айпишнику.

    Скорее всего — нет.

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

    Adamos

    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 @SoreMix Куратор тега Python

    2022-02-10-23-51-54.png

    Ну лично у меня PDF выгрузился, именно тем кодом из ответа, я же тоже не просто так ляпаю.

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

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

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