Skip to content

Darinochka/parser_courses_ru

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UPD: добавлен фильтр по популярности

Критерии:

  • coursera оценка >= 3.5
  • stepik количество обучающихся > 1000
  • openedu фильтр отсутствует, потому что сайт не имеет данных об оценке и количестве учащихся

Парсинг данных

Конфиг

Конфиг config.toml находится в папке проекта и имеет
saving_path - путь для сохранения информации о курсах (.json) languages - языки, которые возможны в названиях курсов, для того чтобы определить конкретный язык. cabinet_api_token - токен личного кабинета для того чтобы достать проекты каждого студента

Данные data

%platform_name%_courses.json

Информация о курсах собирается в .json с разных платформ в следующем формате:

{
  "count_pages": 0,
  "courses": [
    {
      "title": str,
      "url": str,
      "author": str,
      "score": int,
      "number of students": str
    }
   ]
}

Где count_pages количество страниц, которое было обработано на текущем образовательном портале (count_pages в некоторых файлах может быть заменен на count_courses, что буквально означает количество обработанных курсов), а courses содержит обработанные курсы с названием, ссылкой и автором. Примечание

  • данные курсов с Coursera содержат полную информацию о курсах (на 24.03.22 score заменен на assesment, но в модулях это уже изменено, необходимо просто заново спарсить)
  • данные курсов с OpenEdu содержат только title, author, url
  • данные курсов с Stepik содержат title, url, assesment, number_of_students

classroom.csv, projects.csv, students_data.csv

  • classroom.csv - классрум-курсы студентов
  • projects.csv - проекты студентов
  • students_data.csv - все вместе
  • stud_data_tokenize - токенизированные названия проектов и курсов студентов

abbrev.csv

Файл с аббревиатурами в виде: abbrev,original Используется в файле preprocessing.py в функции replace_abbr, чтобы заменять аббревиатуры в названиях курсов. Например, "ИВТ" -> "Информатика и вычислительная техника". Нужно для улучшения обучения модели.

students

parser_students.py - достает с classroom-курсы и проекты студентов с баз данных. Подробнее можно прочитать о функциях в самом файле. preprocessing.py - обрабатывает данные студентов. Чистит, удаляет лишнее, добавляет столбики с токенизированными названиями. Создает новый файл stud_data_tokenize.csv в data.

coursera, openedu, stepik

Во всех директориях присутствует файл "parser_main.py", который выполняет следующее:

parser_main

Проверяет наличие файла, куда будут записываться курсы и пуст ли он. Исходя из проверки вызываются необходимые функции.

Coursera

parser_pages

Данный код предназначен для сбора названий курсов, ссылок на них и авторов курса со страницы 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.

parser_coursera

Этот файл содержит основные функции для парсинга:

  • get_count_pages возвращает число страниц в текущий момент времени
  • get_soup_courses возвращает soup курсов на определенной странице
  • write_courses записывает курсы из soup в файл

Stepik

С API-страниц https://stepik.org/api/courses? берем названия всех курсов, сслыки на них, а также язык (не все языки указаны там корректно) для отбора только русскоязычных курсов. В разделе meta каждой страницы есть bool-параметр has_next, проход по страницам осуществляется циклом while по этой переменной. В цикле запоминается номер текущей страницы каталога (для наглядности, записываем последнюю страницу last_page в json файл stepik_courses). Если появились новые курсы, то происходит повторный (регулярный) "до-парсинг" начинается с последней спаршенной страницы (достается из stepik_courses last_page): производится проверка на появление новых курсов непосредственно на этой странице: поиск последнего курса из файла на странице и дозапись все оставшихся (разумеетсяя, с проверкой на язык, так что, если добавились только, к примеру, курсы на Испанском, эта часть программы отработает "вхолостую"), затем проверяется наличие следующих страниц (проверка has_next) и, если добавились новые страницы — сбор данных с них.

parser_stepik

Этот файл содержит основные функции для парсинга:

  • get_last_page - возвращает последнюю страницу в файле
  • upd_last_page - обновляет последнюю страницу с курсами (если на этой странице появились новые курсы)
  • pars_new_pages - парсит новые страницы начиная с той, которая дана в функции
  • first_pars - парсит все страницы с самого начала и записывает в файл

Openedu

Весь каталог курсов расположен на одной странице https://openedu.ru/course/. Для того чтобы забрать все необходимые нам данные: получаем код страницы, находим необходимые нам строки с названиями, ссылками и авторами, и с помощью встроенных функций работы со строками записываем все данные в файл "openedu_courses.json", а так же количество курсов записываем в файл как "count_courses" . В случае, если появились новые курсы, то получаем код страницы, находим число курсов на странице, сравниваем с прошлым числом курсов из файла "count_courses_openedu.txt", если новове число больше то запускаем работу программы, так как операции получения кода страницы и операции со строками незатратны, если же новое число такое же как старое, то не запускаем программу, так как все курсы у нас уже есть. Сайт специализируется на курсах с русским языком, так что проверка на язык не предусмотрена.

pars_openedu

Этот файл содержит основные функции для парсинга:

  • parser_courses - парсит страницы и возвращает dict курсов

About

Parser courses from coursera, openedu, stepik.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages