Рубрики

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

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

pip install requests

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

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

# импортировал библиотеку запросов

import requests

image_url = "https://www.python.org/static/community_logos/python-logo-master-v3-TM.png"

  
# URL изображения для загрузки определяется как image_url

r = requests.get(image_url) # создать объект ответа HTTP

  
# отправить HTTP-запрос на сервер и сохранить
# HTTP-ответ в объекте ответа с именем r

with open("python_logo.png",'wb') as f:

  

    # Сохранение полученного содержимого в виде файла png в

    # двоичный формат

  

    # написать содержимое ответа (r.content)

    # в новый файл в двоичном режиме.

    f.write(r.content)

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

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

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

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

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

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

    Вот пример:

    import requests

    file_url = "http://codex.cs.yale.edu/avi/db-book/db4/slide-dir/ch1-2.pdf"

      

    r = requests.get(file_url, stream = True)

      

    with open("python.pdf","wb") as pdf:

        for chunk in r.iter_content(chunk_size=1024):

      

             # запись одного куска за раз в pdf файл

             if chunk:

                 pdf.write(chunk)

    Загрузка видео

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

    import requests

    from bs4 import BeautifulSoup

      
    «»»
    URL веб-страницы архива с ссылкой на
    все видео лекции. Это было бы утомительно
    скачать каждое видео вручную.
    В этом примере мы сначала сканируем веб-страницу, чтобы извлечь
    все ссылки, а затем скачать видео.
    «»»

      
    # укажите здесь адрес архива

    archive_url = "http://www-personal.umich.edu/~csev/books/py4inf/media/"

      

    def get_video_links():

          

        # создать объект ответа

        r = requests.get(archive_url)

          

        # создать красивый суп-объект

        soup = BeautifulSoup(r.content,'html5lib')

          

        # найти все ссылки на веб-странице

        links = soup.findAll('a')

      

        # отфильтровать отправку ссылки с помощью .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:

      

            '' 'перебрать все ссылки в video_links

            и скачать их один за другим

              

            # получить имя файла, разделив URL и получив

            # последняя строка

            file_name = link.split('/')[-1]   

      

            print "Downloading file:%s"%file_name

              

            # создать объект ответа

            r = requests.get(link, stream = True)

              

            # загрузка началась

            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!\n"%file_name

      

        print "All videos downloaded!"

        return

      

      

    if __name__ == "__main__":

      

        # получение всех ссылок на видео

        video_links = get_video_links()

      

        # скачать все видео

        download_video_series(video_links)

         

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

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

      Реализация Web Scraping в Python с BeautifulSoup

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

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

    Рекомендуемые посты:

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

    0.00 (0%) 0 votes