Каким может быть расписание ВУЗа
Пользуясь медленными и неудобными информационными ресурсами в сети можно проклинать их создателей и терять время, а можно написать паука, который соберёт и классифицирует информацию нужным образом. Уже обработанная информация будет доступна в любой плоскости и с таким откликом, который требуется. Эта статья об одном из таких опытов. С практическим примером разбора и улучшения расписания НГУ (Новосибирского государственного университета).
Хотел бы отметить, что речь не пойдёт о замене одной некрасивой таблицы на красивую таблицу с другими свойствами, добавлении картинок и мягких цветов, всё это конечно замечательно, но я не художник и когда идёт речь о получении информации не вижу большой разницы между стилями таблиц, пока это не мешает чтению.
Идея заключалась в том, чтобы упростить доступ к расписанию. Оригинальное расписание, доступное на сайте НГУ, можно посмотреть здесь. Для того, чтобы найти собственное расписание мне приходилось начинать свой путь с главной страницы сайта, переходить на “старый сайт”, затем “информационные системы”, далее “расписание занятий”, выбрать корпус, факультет, группу, итого — 6 кликов. Большая часть этих переходов казалась вполне осмысленной, кроме выбора корпуса: казалось бы, зачем выбирать корпус, если факультеты всё равно разные, да и общее их число не так велико, чтобы разбивать на две страницы (всего около 10)? Но ситуация становилась немного сложней, если нужно было найти расписание преподавателя или друга. Для преподавателя нужно было в худшем случае проверить оба корпуса, а для друга нужно было найти сначала его в списках групп, узнать номер группы, а потом уже всё остальное. Шаги вполне выполнимые, но не всегда захочется их совершать, а ведь ничего не мешает собрать эту информацию и сделать возможность осуществлять такие выборки просто набрав в строке имя человека, расписание которого требуется узнать — как в поисковых системах, к которым все уже привыкли.
Разбор списков
Начнём со списка студентов: к счастью, он доступен в виде xml, и для каждой группы выглядит следующим образом:
Для того, чтобы экспортировать такие данные, используется следующий код:
Кроме этого нужно выбрать списки групп по факультетам, но это выполняется аналогичным образом из подобных же xml-файлов.
Исправление до валидного
Само расписание занятий не доступно в xml, кроме того, html, сгенерированный системой расписаний НГУ, оказался невалидным, что поставило меня перед выбором: преобразовывать его к валидному или разбирать регулярными выражениями. Надо сказать, что как-то уж очень не хотелось прибегать к regexp-ам. Разглядывая html файлы я понял, что не так уж много нужно сделать, чтобы документы стали валидными, а именно, добавить один тег
после этих манипуляций расписание замечательным образом разбиралось. Надо отметить, что можно было не перекодировать в utf, но так как все остальные данные проекта находились в utf, а кодировка в этих файлах не была указана — я предпочёл провести конвертацию на этом шаге.
Поиск
Таким образом у меня получились расписание групп и преподавателей, а также списки студентов.
Расписание в получившейся структуре относится к группе или преподавателю, но не к студенту. Для поиска по студентам, преподавателям, группам и факультетам требовался сложный запрос или несколько запросов к