Загрузка файлов из Интернета с помощью Python

Опубликовано: 15 Июля, 2021

Requests - это универсальная HTTP-библиотека на Python с различными приложениями. Одно из его приложений - загрузка файла из Интернета с использованием URL-адреса файла.
Установка: Прежде всего, вам нужно скачать библиотеку запросов. Вы можете напрямую установить его с помощью pip, набрав следующую команду:

 запросы на установку pip

Или загрузите его прямо отсюда и установите вручную.

Скачивание файлов




# imported the requests library
requests import
# URL of the image to be downloaded is defined as image_url
r = requests.get(image_url) # create HTTP response object
# send a HTTP request to the server and save
# the HTTP response in a response object called r
with open ( "python_logo.png" , 'wb' ) as f:
# Saving received content as a png file in
# binary format
# write the contents of the response (r.content)
# to a new file in binary mode.
f.write(r.content)

Этот небольшой фрагмент кода, написанный выше, загрузит следующее изображение из Интернета. Теперь проверьте свой локальный каталог (папку, в которой находится этот скрипт), и вы найдете это изображение:

Все, что нам нужно, это URL-адрес источника изображения. (Вы можете получить URL-адрес источника изображения, щелкнув изображение правой кнопкой мыши и выбрав параметр «Просмотр изображения».)

Скачать большие файлы

Содержимое ответа HTTP ( r.content ) - это не что иное, как строка, в которой хранятся данные файла. Таким образом, в случае больших файлов не удастся сохранить все данные в одной строке. Чтобы решить эту проблему, мы вносим некоторые изменения в нашу программу:

  • Поскольку все данные файла не могут быть сохранены в одной строке, мы используем метод r.iter_content для загрузки данных по частям, указывая размер куска.
     r = requests.get (URL, поток = True)

    Установка для параметра потока значения True приведет к загрузке только заголовков ответов, а соединение останется открытым. Это позволяет избежать считывания всего содержимого сразу в память для больших ответов. Фиксированный фрагмент будет загружаться каждый раз, когда выполняется итерация r.iter_content .

    Вот пример:




    requests import
    r = requests.get(file_url, stream = True )
    with open ( "python.pdf" , "wb" ) as pdf:
    for chunk in r.iter_content(chunk_size = 1024 ):
    # writing one chunk at a time to pdf file
    if chunk:
    pdf.write(chunk)

    Скачивание видео

    В этом примере мы заинтересованы в загрузке всех видеолекций, доступных на этой веб-странице. Все архивы этой лекции доступны здесь. Итак, мы сначала очищаем веб-страницу, чтобы извлечь все ссылки на видео, а затем загружаем видео одно за другим.




    requests import
    from bs4 import BeautifulSoup
    '''
    URL of the archive web-page which provides link to
    all video lectures. It would have been tiring to
    download each video manually.
    In this example, we first crawl the webpage to extract
    all the links and then download videos.
    '''
    # specify the URL of the archive here
    archive_url = " http://www-personal.umich.edu/ ~csev/books/py4inf/media/"
    def get_video_links():
    # create response object
    r = requests.get(archive_url)
    # create beautiful-soup object
    soup = BeautifulSoup(r.content, 'html5lib' )
    # find all links on web-page
    links = soup.findAll( 'a' )
    # filter the link sending with .mp4
    video_links = [archive_url + link[ 'href' ] for link in links if link[ 'href' ].endswith( 'mp4' )]
    return video_links
    def download_video_series(video_links):
    for link in video_links:
    '''iterate through all links in video_links
    and download them one by one'''
    # obtain filename by splitting url and getting
    # last string
    file_name = link.split( '/' )[ - 1 ]
    print ( "Downloading file:%s" % file_name)
    # create response object
    r = requests.get(link, stream = True )
    # download started
    with open (file_name, 'wb' ) as f:
    for chunk in r.iter_content(chunk_size = 1024 * 1024 ):
    if chunk:
    f.write(chunk)
    print ( "%s downloaded! " % file_name )
    print ( "All videos downloaded!" )
    return
    if __name__ = = "__main__" :
    # getting all video links
    video_links = get_video_links()
    # download all videos
    download_video_series(video_links)

    Преимущества использования библиотеки запросов для загрузки веб-файлов:

    • Можно легко загрузить веб-каталоги, рекурсивно просматривая веб-сайт!
    • Это метод, не зависящий от браузера, и он намного быстрее!
    • Можно просто очистить веб-страницу, чтобы получить все URL-адреса файлов на веб-странице и, следовательно, загрузить все файлы с помощью одной команды -

      Реализация парсинга веб-страниц в Python с помощью BeautifulSoup

    Этот блог предоставлен Нихилом Кумаром. Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

    Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.

    Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

    Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.