Проект #3

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

Python-разработчик

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

2-4
недели

Цель

Третий проект в значительной степени ориентирован на проработку принципов и закрепление знаний по работе с файловой системой, 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'

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

Наставники

Аватар эксперта Маруф Караев
Маруф Караев
Software Engineer, EPAM Systems
Аватар эксперта Артем Архипов
Артем Архипов
Full Stack Engineer, AlgoMost
Аватар эксперта Валентин Хомутенко
Валентин Хомутенко
Backend Engineer, Avito
Аватар эксперта Сергей Новожилов
Сергей Новожилов
Python Developer, UPM
Сколько стоят проекты?

Проекты входят в стоимость обучения в любом формате: самостоятельном, групповом и индивидуальном. Дополнительно платить не нужно.

Зачем проходить проекты?

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

Проекты — портфолио программиста. Их код останется в вашем аккаунте на GitHub и будет преимуществом при поиске работы.

Чтобы узнать о том, что такое проекты и в чём их польза, прочитайте нашу статью «Анатомия проектов Хекслета».

Что делать, если возникли трудности во время выполнения проекта?

Задавайте вопросы в разделе «Обсуждение» на странице шага, на котором возникли трудности, или вашему наставнику. Изучите вопросы других студентов в «Обсуждениях»: там собрана большая база знаний, ей можно и нужно пользоваться. Попросите о помощи в нашем Slack-чате в канале #hexlet-projects.

Кто проверяет проекты?

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

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

Нажмите на виджет в правом нижнем углу экрана и поищите ответ в нашей справке. Или сразу пишите на support@hexlet.io — вам ответит живой человек из команды Хекслета.