ЛР№2_ИС_Б19з. Кафедра Интеллектуальных Кибернетических Систем лабораторная работа 24 По предмету "Нереляционные базы данных" студент Группы исб19з Каюмов Р. И. Обнинск, 2023 Задание исследование
Скачать 0.69 Mb.
|
Федеральное агентство по образованию Федеральное государственное бюджетное образовательное Учреждение высшего профессионального образования Национальный исследовательский ядерный университет «МИФИ» Обнинский институт атомной энергетики Кафедра Интеллектуальных Кибернетических Систем Лабораторная работа №2-4 По предмету “Нереляционные базы данных” Выполнил: студент Группы ИС-Б19з Каюмов Р.И. Обнинск, 2023 Задание: Исследование и валидация данных игроков в футбол для дальнейшего их парсинга и выгрузку в MongoDB. Источник данных https://www.fctables.com/top_football_players/ Рис. 1 Источник данных (веб-сайт) Структура данных В качестве полей для структуры данных были выбраны следующие значения: Имя игрока – String Команда – String Номер игрока – Int Позиция игрока – String День рождения – String Национальность - String Алгоритм парсинга Для начала получаем массив ссылок на каждого игрока с главной страницы. Далее поочередно открываем каждую ссылку и собирая нужные данные формируем case class для каждого игрока. Преобразуем case class в json файл и сохраняем в директории. Формат выходных данных (Json) Ниже представлен скриншот показывающий структуру данных в виде json Рис. 2 JSON структура Запросы к базе данных db.players.find( {team: "Barcelona"} ) - запрос на получение всех игроков из команды Барселона. db.players.find($and: {team: "Barcelona"}, {position: Forward} ) – запрос с двумя условиями db.players.stats() – возвращает статистику по коллекции Разработка парсера Рис. 3 Класс парсера На рисунке 3 представлен кейс-класс для структуры данных и класс парсера для получения данных с веб страницы. В начале определяется экземпляр объекта JsoupBrowser для работы с браузером и URL. В функции getPlayersLinks мы получаем лист ссылок на каждого из игроков, далее в функции getPlayers, мы проходимся по ссылкам из листа полученного из прошлой функции, собираем лист из игроков, вытаскивая значения из определенных тегов. Последние две функции используются для конвертации экземпляров кейс классов в JSON и созданию файлов в каталоге resources. Выгрузка данных в базу MongoDB Рис. 4 Программа для выгрузки данных в MongoDB На рисунке 4 представлен основной объект программы. В нем мы создаем экземпляр класса Parser и вызываем поочередно все методы для генерации и подготовки данных. Далее создаем кодек для кейс-класса и определяем экземпляр клиента базы данных и получаем из него саму базу и коллекцию. В функции readJsonFiles читаем все файлы из директории и получаем массив из json строк, далее с помощью библиотеки Circe декодируем строки в кейс-классы. Поскольку декодер возвращает массив из Either, мы с помощью pattern matching разбираем их. Используя функцию insertMany добавляем данные в базу. Рис. 5 Отображение данных в программе MongoDB Compass Ссылка на исходный код проекта: https://gitlab.com/aizendev/scala-2022-task2/-/tree/work?ref_type=heads |