МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное автономное образовательное учреждение высшего образования «Новосибирский национальный исследовательский государственный университет» (Новосибирский государственный университет, НГУ) Структурное подразделение Новосибирского государственного университета – Высший колледж информатики Университета (ВКИ НГУ) КАФЕДРА ИНФОРМАТИКИ КУРСОВАЯ РАБОТА по дисциплине «Прикладное программирование» на тему: «Парсер погоды и разработка оформления с помощью OpenCV» Руководитель Кудинов В.Ю. «___» _______ 2020 г. Студента 5 курса Бондаренко А.И. Гр. 603а1 «___» _______ 2020 г. Новосибирск 2020 СОДЕРЖАНИЕ ВВЕДЕНИЕ .................................................................................................................................... 3 1. Реализация .............................................................................................................................. 4 1.1. Основные библиотеки ........................................................................................................ 4 1.2. Парсинг погоды .................................................................................................................. 4 1.3. База данных ......................................................................................................................... 5 1.4. Главный модуль .................................................................................................................. 5 ЗАКЛЮЧЕНИЕ.............................................................................................................................. 7 ИСПОЛЬЗУЕМЫЕ ИСТОЧНИКИ .............................................................................................. 8 2 ВВЕДЕНИЕ Python — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В качестве курсового проекта была поставлена задача: написать приложение «Парсер погоды» и разработать оформление с помощью OpenCV, с целью повышения навыков написание программных продуктов на языке Python в среде разработке PyCharm. Парсер - это программа для парсинга ключевых слов сайтов. Она настраивается, в нее вводятся параметры поиска и прочие указания, чтобы получить семантическое ядро или анализ карточек товаров для интернет-магазина. Так же часто это программное обеспечение, которое заходит на вебсайт под видом обыкновенного пользователя и, используя скрипты, производит сбор данных. Для написания игры использовалось программное обеспечение PyCharm 2020.2.3x64, так как с помощь функций данной программы можно сделать все необходимое для реализации нашего проекта. 3 1. Реализация Для создания данного программного продукта использовалась среда разработки PyCharm с возможностью написания программы на языке Python. OpenCV - библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом. Реализована на C/C++, также разрабатывается для Python, Java, Ruby, Matlab, Lua и других языков. Может свободно использоваться в академических и коммерческих целях — распространяется в условиях лицензии BSD. С помощью данной библиотеки реализовано создание открытки из данных полученных при ходе работы приложения. Данное приложение является консольным, поскольку нет необходимости в графическом интерфейсе, простота в использовании дает полную возможность ограничиться консолью. 1.1. Основные библиотеки Для создания и отображения открытки используется библиотека OpenCV. Так же требуется библиотека peewee для работы базой данных. Для парсинга сайта используется библиотека BeautifulSoup. Подключаем их с помощью import. 1.2. Парсинг погоды В качестве цели парсинга сайта был выбран сайт «https://pogoda33.ru». Парсинг реализован в отдельном модуле «parsing_weather». В нем присутствуют отдельные классы «WeatherMaker» и «InfoDay», так же реализовано исключение «WeatherException» для более качественного отслеживание ошибок в коде. WeatherMaker – класс который является парсером. Главная функция run, которая обрабатывает все дни по заданным промежуткам. Принимает начальную и конечную дату, а возвращает словарь дата/информация о дне. Дата принимается в формате «день.месяц.год». В ходе работы функции run, вызывается другая немаловажная функция get_info_day, которая парсит страницу по переданной дате и получается необходимую информацию, по ее наличии. InfoDay – класс который хранит информацию о дне, так же обрабатывает ее, по необходимости переводит в другой формат. Функция avg приводит каждую переменную класса к одному значению, получая среднее значение, учитывая приоритеты перед осадками и снегом. Есть возможность передать необязательный параметр dict (По умолчанию - True), он отвечает за получение результата функции, при True выдает 4 информацию в виде словаря, при False – в виде класса. Для преобразования класса в словарь, используется отдельная функция класса InfoDay – class_to_dict. 1.3. База данных В качестве базы данных была выбрана свободная реляционная система управления базами данных – MySQL. Для работы с ней была выбрана ORM «peewee», для более удобного взаимодействия и исключая ошибки в запросах. База данных, состоит из одной таблицы, включающая в себя поля id, date, temperature, precipitation, pressure, wind_speed, wind_direction, humidity, dew_point, cloudiness. Для настройки базы данных был создан отдельный модуль «data_base_setting». Данный модуль создает подключение к БД (База данных), при отсутствии таблицу, необходимую для функционирования самой базы. 1.4. Главный модуль «01_weather» – главный модуль, который объединяет в себе остальные модули, дополняя их работу своим функционалом. В данном модули присутствует классы: DatabaseUpdater, ImageMaker которые помогают реализуют функционал модуля «parsing_weather» и «data_base_setting». DatabaseUpdater – класс для удобного взаимодействия с базой данных. DatabaseUpdater имеет функцию get_days, которая принимает на вход два параметра: начальную и конечную дату. Данная функция обращается к базе данных, для получения имеющейся информации о днях в интервале. Так же обрабатывает ошибки по отсутствии в БД необходимых данных. DatabaseUpdater имеет функцию add_info_days, которая принимает на вход два параметра: начальную и конечную дату. Данная функция запускает метод «run» в классе «WeatherMaker» из модуля «parsing_weather», парсит необходимые страницы и добавляет полученные данные в БД. ImageMaker - класс снабжённый методом рисования погодной открытки, а так же вспомогательными функциями. Для рисования открытки используется OpenCV. На заготовку наносится градиент с цветом отражающий тип погоды: солнечно – от желтого к белому, дождь – от синего к белому, снег – от голубого к белому, облачно – от серого к белому. После “рисуется” текст, полученный ранее. ImageMaker имеет функцию gradient, которая принимает на вход параметр индекса цвета: «1» - серый, «2» - синий, «3» - голубой, «4» - желтый. После наносит на заготовку градиент. Так же ImageMaker снабжен методом расположения картинки на другой картинки используя метод overlay_transparent, на вход принимается два изображения и координаты в качестве «X» и «Y». Основная функция в ImageMaker - create_card. Она запускает функции класса в необходимой последовательности, для создания полноценной открытки. 5 При запуске данного модуля выполняется основная часть кода, в которой пользователю предлагается выбрать действие: 1. Добавить прогноз за диапазон дат в базу данных. 2. Получить прогноз за диапазон дат из базы. 3. Создать открытку из полученных прогнозов. 4. Вывести полученные прогнозы на консоль. 5. Завершить программу При выборе действия запускается код, необходимый для желаемого результата. Так же в данном модуле есть функция get_date, которая отвечает за получение диапазона дат от пользователя. 6 ЗАКЛЮЧЕНИЕ В данном курсовом проекте была поставлена задача написать приложение «Парсер погоды» и разработать оформление с помощью OpenCV с целью изучения и приобретения необходимых навыков для работы на языке программирования Python. В настоящее время Python развивается как язык с маленьким порогом вхождения, с каждым днем развиваясь и приобретая большое комьюнити. При большом сообществе язык быстро развивается, становясь многофункциональным. Одним из таких рывков стала библиотека «OpenCV», «Peewee», «BeautifulSoup». Благодаря этим библиотекам была написана программа и изучены различные аспекты языка программирования Python. 7 ИСПОЛЬЗУЕМЫЕ ИСТОЧНИКИ 1. Егоров А., Основы [электронный Python ресурс] - http://egoroffartem.pythonanywhere.com/course/python. 2. Шапошникова С., локальные и глобальные переменные [электронный ресурс] - https://younglinux.info/python/local-global. 3. Документация по OpenCV [электронный ресурс] - https://docs.opencv.org/master/ 4. Документация по Peewee [электронный ресурс] - http://docs.peewee- orm.com/en/latest/ 5. Документация по BeautifulSoup [электронный ресурс] - https://www.crummy.com/software/BeautifulSoup/bs4/doc.ru/bs4ru.html 8