Критерии:
Конфиг config.toml находится в папке проекта и имеет
saving_path
- путь для сохранения информации о курсах (.json)
languages
- языки, которые возможны в названиях курсов, для того чтобы определить конкретный язык.
cabinet_api_token
- токен личного кабинета для того чтобы достать проекты каждого студента
Информация о курсах собирается в .json с разных платформ в следующем формате:
{
"count_pages": 0,
"courses": [
{
"title": str,
"url": str,
"author": str,
"score": int,
"number of students": str
}
]
}
Где count_pages
количество страниц, которое было обработано на текущем образовательном портале (count_pages
в некоторых файлах может быть заменен на count_courses
, что буквально означает количество обработанных курсов), а courses
содержит обработанные курсы с названием, ссылкой и автором.
Примечание
classroom.csv
- классрум-курсы студентовprojects.csv
- проекты студентовstudents_data.csv
- все вместеstud_data_tokenize
- токенизированные названия проектов и курсов студентовФайл с аббревиатурами в виде:
abbrev,original
Используется в файле preprocessing.py
в функции replace_abbr, чтобы заменять аббревиатуры в названиях курсов. Например, "ИВТ" -> "Информатика и вычислительная техника". Нужно для улучшения обучения модели.
parser_students.py
- достает с classroom-курсы и проекты студентов с баз данных. Подробнее можно прочитать о функциях в самом файле.
preprocessing.py
- обрабатывает данные студентов. Чистит, удаляет лишнее, добавляет столбики с токенизированными названиями. Создает новый файл stud_data_tokenize.csv в data.
Во всех директориях присутствует файл "parser_main.py", который выполняет следующее:
Проверяет наличие файла, куда будут записываться курсы и пуст ли он. Исходя из проверки вызываются необходимые функции.
Данный код предназначен для сбора названий курсов, ссылок на них и авторов курса со страницы https://www.coursera.org/directory/courses. Сперва проверяется существование файла
coursera_courses.json в директории config['saving_path']
. Далее если такой файл существует и он не пустой, проверяется переменная count[courses|pages]
. Следущим этапом вызывается функция parser_new_courses
. Функция выполняет 2 задачи: если на последней странице добавились новые курсы, то записывает их в файл. Если увеличилось число страниц с курсами, то парсит их. Если файл пустой, то заново парсит все страницы.
В данном случае нам нужно парсить только определенную страницу, а именно последнюю. Из файла "coursera_courses.json" берем count_pages
, которая была последней, когда мы парсили последний раз. После чего берем из этого же файла название последнего курса и переходим на последнюю страницу. Сверяем название последнего курса с теми, которые есть на странице и когда находим такое же название, берем все курсы после найденого и записываем их в файл, это и есть новые добавленные недавно курсы.
В данном случае, надо найти последнюю страницу в каталоге и спарсить данные начиная с конца старой страницы, которая записана в файле "coursera_courses.json" (count_pages
) и до новой найденной страницы. Данные так же записываются в файл , а новая(полследняя) страница записывается вместо старой в переменную count_pages
.
Этот файл содержит основные функции для парсинга:
get_count_pages
возвращает число страниц в текущий момент времениget_soup_courses
возвращает soup курсов на определенной страницеwrite_courses
записывает курсы из soup в файлС API-страниц https://stepik.org/api/courses? берем названия всех курсов, сслыки на них, а также язык (не все языки указаны там корректно) для отбора только русскоязычных курсов. В разделе meta каждой страницы есть bool-параметр has_next, проход по страницам осуществляется циклом while по этой переменной. В цикле запоминается номер текущей страницы каталога (для наглядности, записываем последнюю страницу last_page
в json файл stepik_courses). Если появились новые курсы, то происходит повторный (регулярный) "до-парсинг" начинается с последней спаршенной страницы (достается из stepik_courses last_page
): производится проверка на появление новых курсов непосредственно на этой странице: поиск последнего курса из файла на странице и дозапись все оставшихся (разумеетсяя, с проверкой на язык, так что, если добавились только, к примеру, курсы на Испанском, эта часть программы отработает "вхолостую"), затем проверяется наличие следующих страниц (проверка has_next) и, если добавились новые страницы — сбор данных с них.
Этот файл содержит основные функции для парсинга:
get_last_page
- возвращает последнюю страницу в файлеupd_last_page
- обновляет последнюю страницу с курсами (если на этой странице появились новые курсы)pars_new_pages
- парсит новые страницы начиная с той, которая дана в функцииfirst_pars
- парсит все страницы с самого начала и записывает в файлВесь каталог курсов расположен на одной странице https://openedu.ru/course/. Для того чтобы забрать все необходимые нам данные: получаем код страницы, находим необходимые нам строки с названиями, ссылками и авторами, и с помощью встроенных функций работы со строками записываем все данные в файл "openedu_courses.json", а так же количество курсов записываем в файл как "count_courses" . В случае, если появились новые курсы, то получаем код страницы, находим число курсов на странице, сравниваем с прошлым числом курсов из файла "count_courses_openedu.txt", если новове число больше то запускаем работу программы, так как операции получения кода страницы и операции со строками незатратны, если же новое число такое же как старое, то не запускаем программу, так как все курсы у нас уже есть.
Сайт специализируется на курсах с русским языком, так что проверка на язык не предусмотрена.
Этот файл содержит основные функции для парсинга:
parser_courses
- парсит страницы и возвращает dict курсов