Для скачивания файлов в python есть очень мощная библиотека – requests. Почти все свои программки для работы с сайтами я пишу с использованием этого модуля. Он удобный, быстрый и многофункционален. Позволяет изменять headers, body, скачивать и заливать файлы. В этом посте я хочу рассказать вам как с легкостью качать файлы на питоне.
Простой запрос страницы через requests
Запросить код сайта можно обычным запросом requests.post(“http://bdseo.ru”).
Как вывести содержимое страницы после запроса
Чтобы обрабатывать результаты, нужно запросу присвоить переменную:
r = requests.post("http://bdseo.ru")
print(r.text)
Теперь можно вывести результат запросом r.text (или print(r.text)).
Как сохранить страницу html через requests
1. Делаем запрос.
2. Записываем данные в файл.
На примере (полный код программы):
import requests #импортируем модуль
send=requests.post('http://bdseo.ru') #делаем запрос
file = open('D://bdseo.html','w') #создаем файл для записи результатов
file.write(send.text) #записываем результат
file.close() #закрываем файл
После этого на диске Д появился файл с содержимым главной страницы моего блога. Иногда может потребоваться сменить кодировку текста (питон буде подсказывать, выдавать ошибки).
Примеры запросов requests на python 3
Скачивать файлы можно посредством POST или GET запросов. Сам код запроса почти одинаковый:
send_request = requests.post(url, headers=my_head, data=params) или GET-запрос send_request = requests.get(url, headers=my_head, data=params)
Где:
send_request – моя переменная, сам запрос. Нужна для дальнейшего обращения к результатам (например, send_request.text – выведет весь код страницы; send_request.url – ссылка страница, если был редирект – то ссылка-редиректа; send_request.headers – код-хедерс страницы);
my_head – если я менял headers, то передаю свои параметры (например, подменил User-agent);
params – параметры запроса; например, логин/пароль.
Как сохранить файл через python (модуль requests)
Логика скачивания файла следующая:
1) делаем запрос на ссылку файла;
2) записываем данные в файл на ПК.
Выглядит все этого следующим образом (полный код программы):
import requests #импортируем модуль
f=open(r'D:\file_bdseo.zip',"wb") #открываем файл для записи, в режиме wb
ufr = requests.get("http://site.ru/file.zip") #делаем запрос
f.write(ufr.content) #записываем содержимое в файл; как видите - content запроса
f.close()
Данный код скачает файл на диск Вашего компьютера. Обратите внимание на комментарии – режим записи ‘wb’, сохраняем ‘content’. Закрывайте файл после запроса.
Как скачать файл через прокси в python
Модуль requests имеет подробную документацию (на английском) – http://docs.python-requests.org/en/master/. Работать с сайтами можно и через прокси, для этого достаточно добавить в запрос данные по прокси.
Пример кода:
proxy='alogin:parol@10.1.1.1:3128' #данные прокси; логин, пароль и айпи адрес с портом
proxy = {'http': 'http://' + proxy, 'https': 'https://' + proxy} #делаем прокси доступным в http, https
bb3 = requests.get(url, proxies=proxy) #делаем запрос уже с прокси
Обратите внимание, что некоторые сайты могут блокировать публичные прокси, а также дополнительно запрашивать капчу (редко, но бывает).
Как скачать много файлов с сайта
Чтобы скачать много файлов – пользуйтесь циклами. Чтобы получить ссылки с сайта, если вы хотите скачать много файлов – “просканируйте” сайт на эти ссылки, а потом делайте запросы. Это можно делать также модулем requests в python 3, но это уже совсем другая тема.


Огромное спасибо! Статья супер!
спасибо за комментарий, мне приятно.
А как сделать вывод загрузки?
То есть, вот я уже давно пользуюсь модулем requests. Скачиваю по одной серии сериал, он как бы автоматически скачивает одну серию, уведомляет меня и если я этого хочу, скачивает следующую.
И как сделать вывод, вот например, “56% завершено”. Посылая запросы на сайт, можно ли отследить загрузку?
Вариантов много, можно в tkinter, если просто через консоль (или IDLE) тоже можно.
Гуглится просто: “progressbar download requests“; первые примеры на stackoverflow очень простые и полезные 🙂