Загрузка файлов из Интернета с помощью Python
Requests - это универсальная HTTP-библиотека на Python с различными приложениями. Одно из его приложений - загрузка файла из Интернета с использованием URL-адреса файла.
Установка: Прежде всего, вам нужно скачать библиотеку запросов. Вы можете напрямую установить его с помощью pip, набрав следующую команду:
запросы на установку pip
Или загрузите его прямо отсюда и установите вручную.
Скачивание файлов
# imported the requests libraryrequests import # URL of the image to be downloaded is defined as image_urlr = 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 rwith 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 = 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 importfrom bs4 import BeautifulSoup '''URL of the archive web-page which provides link toall video lectures. It would have been tiring todownload each video manually.In this example, we first crawl the webpage to extractall the links and then download videos.''' # specify the URL of the archive here 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. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.