Диплом изначально делался для курса Python-разработчик на Geekbrains. Поэтому для данной платформы лучше не использовать (ревьюер на скрине).
О проекте. В качестве основы был взят парсер https://mob25.com/parser-na-python-sbor-novinok-na-litres-s-publikaciej-v-wordpress/. Добавлен простой веб-интерфейс и файл Flask. Веб-интерфейс содержит только две кнопки (запуск и остановка парсера) и панель вывода информации от парсера (перехватывается print). Все это было загружено на виртуальный сервер Beget и корректно работало — можно было зайти на указанный IP и запустить сканирование. Новые публикации отслеживались на Litres и публиковались на текущем сайте (раздел книги). Файл парсера запускался в отдельном потоке, вывод перехватывался и сразу выводился на странице без перезагрузки.
Итоговая цель — создание партнерского магазина с автоматическим наполнением. На каждую страницу добавляется партнерская ссылка на исходную страницу.
Всего 60 страниц с приложениями (код)
Теория — с 4 по 27 страницу.
Практическая часть — с 28 по 49 страницу.
Приложения — с 53 по 60 страницу.
Все описано достаточно подробно, всего 28 картинок. Видно, что писалось не из головы, а в процессе реальной работы. Далее подробно об основных разделах.
Теоретическая часть без углубления в выбор инструмента. К примеру, перечисление популярных библиотек для парсинга с кратким описанием особенностей, краткая подводка к выбранной, далее уже более подробное описание. Делал рерайт из открытых источников, на уникальность конечный проект не проверял, поскольку требований не было. Практическая часть написана самостоятельно в процессе работы.
Основной функционал
Общий алгоритм работы. Описано, что было предпринято для обхода блокировки парсера. Как выглядит полученный headers и как он добавляется к запросу на сайт. Указано какая использовалась скорость при тестировании, какая при реальной работе. Отмечено, что удалось успешно обойти блокировку со стороны каталога.
Скрипт сбора данных
Описан общий алгоритм работы скрипта, назначение двух текстовых файлов (категории для обхода и идентификаторы уже опубликованных книг). Указано, как реализуется выбор нужных фильтров на страницах каталога.
Далее на примера автора книги показано, как определяется нужный селектор через инструменты разработчика в браузере и как реализуется извлечение в переменную непосредственно в коде Python. Отмечено, как реализован обход ошибок, когда элемент отсутствует на странице. Приложен скрин кода, извлечение всех основных элементов (автор, ISBN, описание, название), далее скрин как полученные данные собираются в одну переменную и подготавливается подготовка к публикации на WordPress.
Далее кратко описано, как реализуется работа со списком идентификаторов, чтобы дубликаты пропускались. Скриншот полученной публикации на сайте и список использованных библиотек.
Создание веб-интерфейса
Перечислены элементы интерфейса, описана реализация обработчика нажатий на кнопки (AJAX-запросы). Реализация сбора информации и передачи на странице через GET-запрос (скрин скриптов). Перечислены основные библиотеки и их назначение (subprocess, threading, os и signal) и глобальные переменные (статус работы скрипта и список полученных сообщений).
Описана функция run_script (основная), которая обеспечивает запуск файла парсера, перехват сообщений и сохранения их в список. Далее кратко описаны маршруты для старта и остановки скрипта, а также вывода сообщений. Приложены соответствующие скриншоты кода и страница интерфейса с выведенными сообщениями.
Тестирование работы
Описано, что тестировалась устойчивость работы в разных режимах. Были обнаружены и устранены незначительные ошибки. Например, изначально скрипт останавливался с ошибкой если отсутствовал незначительный элемент (автор или код ISBN). Была реализована проверка на наличие и пропуск при необходимости — запись на сайте публиковалась корректно.
Проверено, что фильтры в каталоге срабатывают корректно, все книги обрабатываются и переносятся на сайт. Визуально проверено, что публикация отображается корректно, нет пустых мест, если элемент пропускается.
Отдельно оценена нагрузка на хостинг при высокой скорости публикации. Приложен скриншот из статистики хостера — на максимальной скорости идет превышение нагрузки. Отмечено, что это не критично, поскольку в рамках поставленной задачи будут отслеживаться только определенные категории (новинки и популярные в данный момент). Таких книг относительно немного, нагрузка минимальна. Есть краткий вывод, что сканер работает стабильно и соответсвует требованиям.
Публикация на сервере
Кратко описана утилита PuTTY, которая использовалась для подключения по SSH к серверу Beget.
Далее указано, что для работы создан виртуальный сервер, скрин с характеристиками, для загрузки файлов использовался интерфейс личного кабинета, показан итоговый список файлов.
Далее описана первичная настройка сервера. Интерпретатор Python уже установлен в выбранной ОС, для установки библиотек используется файл requirements.txt. Описано назначение данного файла, команда для создания в автоматическом режиме, скрин содержимого. Далее указано, как производится запуск файла Flask через интерфейс PuTTY.
Полученный результат
Описано для чего предназначен проект, что такое партнерский магазин, преимущества и недостатки таких сайтов — их относительно легко запустить, но конкуренция очень высокая. Указаны конкретные условия для партнеров Литрес.
Далее отмечено, что уже в первый месяц после запуска есть определенный результат, приложен скрин текущей статистики продаж.
Вывод — краткое описание проделанной работы.
В приложении — полный код HTML-страницы, файла Flask и основной код парсера (для сокращения объема).
Стоимость файла диплома — 1000 рублей. Обращаться на почту (картинка):