Проект #3

Загрузчик страниц

Профессия Python-программист

Научитесь основам работы с HTTP с применением библиотеки requests. Узнаете как работать с HTML DOM средствами библиотеки BeautifulSoup и как производить над документами манипуляции. Попрактикуетесь во взаимодействии с диском — создании файлов и директорий, работе с файловыми путями. А в конце у вас получится удобный и полезный инструмент, применимый в повседневной жизни!

2-4
недели
Иконка профессии Python-программист

Цель

Третий проект в значительной степени ориентирован на проработку принципов и закрепление знаний по работе с файловой системой, HTTP-запросами, исключениями и их обработкой. Современные приложения часто используют эти возможности обмениваясь данными с внешними сервисами посредством HTTP, совершая попутно множественные операции ввода/вывода, в т.ч. с файловой системой. Как правило, взаимодействие с внешней средой сопряжено с потенциальными ошибками, которые могут возникнуть в процессе работы приложения, например, сбой интернет соединения, недоступность внешнего сервиса, отсутствие прав на запись файла и многое другое. И при написании кода, нужно будет обязательно учитывать эти моменты.

В этом проекте вы познакомитесь с библиотекой для выполнения HTTP-запросов requests, изучите возможности встроенных модулей os и sys, научитесь работать с ошибками и исключениями, а также контролировать процесс выполнения кода с помощью логирования. Для этих целей в python есть специальный модуль logging, который повсеместно используется при написании библиотек/приложений.

Все это влияет не только на сам код, но и на тесты для него. Так как результат работы тестов будет зависеть от наличия интернет-соединения, доступности внешнего сервиса. Для этого, в тестах проекта отрабатывается манки-патчинг HTTP-запросов с помощью популярной библиотеки requests-mock.

Также, в этом проекте идет активная работа с HTML. Для замены ссылок внутри страницы, нужно выполнить парсинг страницы в DOM. Из него потребуется извлечь все ресурсы для скачивания и заменить их локальными ссылками. В python эта задача выполняется с помощью библиотеки BeautifulSoup.

И, конечно же, архитектура. Создание хороших абстракций и правильная организация процесса загрузки – ключевая задач при создании загрузчика страниц. В этом проекте много преобразований, много операций ввода/вывода. Для создания хорошей архитектуры, понадобится вспомнить все чему учил Хекслет не только в курсах, но и в дополнительных статьях, например, из серии "совершенный код".

Описание

PageLoader – утилита командной строки, которая скачивает страницы из интернета и сохраняет их на компьютере. Вместе со страницей она скачивает все ресурсы (картинки, стили и js) давая возможность открывать страницу без интернета.

По такому же принципу устроено сохранение страниц в браузере (вы знали что они так умеют?).

Пример использования:

$ page-loader --output /var/tmp https://ru.hexlet.io/courses

ru-hexlet-io-lessons.rss |############################### | 52/52
ru-hexlet-io-assets-application.css |############################### | 10/10
ru-hexlet-io-assets-favicon.ico |############################### | 10/10
ru-hexlet-io-assets-favicon-196x196.png |############################### | 10/10
ru-hexlet-io-assets-favicon-96x96.png |############################### | 10/10
ru-hexlet-io-assets-favicon-16x16.png |############################### | 10/10
ru-hexlet-io-assets-favicon-128.png |############################### | 10/10

Page was downloaded as '/var/tmp/ru-hexlet-io-courses.html'

Утилита скачивает ресурсы и показывает прогресс по каждому ресурсу в терминале.

Вопросы и ответы

Какое расписание у проекта?

У проекта нет расписания и вы можете заниматься в удобное для вас время. Доступ к проекту будет пока действует ваша премиум подписка.

Как оплачивается проект?

Проект доступен в рамках подписки на план «Премиум», дополнительная оплата не нужна. В течение месяца можно пройти один проект. Если у вас есть действующая профессиональная подписка, то стоимость премиум подписки будет меньше. Система пересчитает стоимость в зависимости от количества не использованных дней на текущем плане.

Зачем нужны проекты?

Проект помогает реализовать на практике то, что вы узнали на курсах. Важный момент: написанный вами код навсегда остается в вашем репозитории на GitHub. Фактически это ваша первая работа в портфолио.

Что делает наставник в проектах?

Наставник полностью поддерживает вас и делает всё, чтобы вы успешно сдали проекты. Наставник будет отвечать на ваши вопросы, помогать решать проблемы, проверять задания и направлять к правильным решениям. Все шаги в проекте вы проходите с поддержкой наставника.

У меня есть другой вопрос

Пишите нам на support@hexlet.io, вам ответит живой человек из команды Хекслета. Или нажмите на иконку со знаком вопроса в правом нижнем углу экрана. Там есть ответы и на другие вопросы и удобная форма для отправки сообщения нам.