Вы имеете дело с простой формой, которую нужно обновлять и отправлять для каждого семестра и каждого предмета. Селен - это хорошо, но я думаю, что здесь его может быть слишком много. rvest::html_session
хорош в таких вещах:
library(tidyverse)
library(rvest)
# Start session, extract semesters from form and filter.
session <- html_session("https://www7.nau.edu/pair/reports/ClassDistribution")
form <- html_form(session)[[1]]
semesters <- form$fields[[5]]$options[-1]
semesters <- semesters[grep("201[5-9]", names(semesters))]
# Update form with semester info, submit, and extract subjects.
form <- set_values(form, 'ctl00$MainContent$TermList' = semesters[1])
session <- submit_form(session, form, "<unnamed>")
form <- html_form(session)[[1]]
subjects <- form$fields[[6]]$options
# Update form with subject, submit, and extract data frame(s).
form <- set_values(form, 'ctl00$MainContent$SubjectList' = subjects[1])
session <- submit_form(session, form, "ctl00$MainContent$Button1")
df_list <- html_table(session, T, T, T)
Две вещи, о которых нужно знать:
df_list
возвращает список фреймов данных, которые вам понадобятся объединить. Я рекомендую dplyr::bind_rows()
. - Вам понадобятся два цикла: внешний l oop для семестров и внутренний l oop для предметов в каждом семестре.