Я очень начинающий программист на языке R, но я пытался выполнить некоторую очистку веб-сайта онлайн-университета с помощью пакета rvest. Первая таблица информации, которую я взял с веб-страницы, была списком всех предлагаемых программ докторского уровня. Вот мой код:
library(xml2)
library(httr)
library(rvest)
library(selectr)
Соскоб Капелла Докторантура
fileUrl <- read_html("http://www.capella.edu/online-phd-programs/")
Используя инструмент «Селектор гаджетов» в Chrome, я смог выбрать контент на сайте, который хотел извлечь. В этом случае я выбираю все программы докторского уровня.
Degrees <- fileUrl %>%
html_nodes(".accordianparsys a") %>%
html_text()
Degrees
Затем я создал фрейм данных о докторских степенях.
Capella_Doctoral = data.frame(Degrees)
Ниже я создаю еще один столбец, в котором помечаются эти программы как исходящие от Capella.
Capella_Doctoral$SchoolFlag <- "Capella"
View(Capella_Doctoral)
Кажется, что в моем приведенном выше коде все отлично работает. Однако следующий тип информации, которую я хотел бы очистить, - это стоимость обучения и кредитные часы по каждой докторской программе. Эта информация есть на странице каждой отдельной докторской программы. Например, программа PhD in Leadership будет содержать информацию о стоимости обучения и кредитных часах на этой странице "http://www.capella.edu/online-degrees/phd-leadership/ ". Программа DBA по бухгалтерскому учету будет содержать информацию об оплате обучения и кредитных часах на этой странице "http://www.capella.edu/online-degrees/dba-accounting/ ". Общей темой для различных страниц является то, что она включает название программы после "онлайн-степеней /".
Чтобы создать список различных веб-страниц, которые мне нужны (те, которые включают названия докторских программ), я разработал приведенный ниже код.
Форматирование докторских степеней в нижнем регистре, удаление начальных и конечных пробелов, а затем замена любых пробелов дефисами
Lowercase <- tolower(Capella_Doctoral$Degrees)
Lowercase
Удаление начальных и конечных пробелов
trim <- function (x) gsub("^\\s+|\\s+$", "", x)
Trim <- trim(Lowercase)
Trim
замена пробелов тире
Dashes <- gsub(" ", "-", Trim)
Dashes
Dashes2 <- gsub("---", "-", Dashes)
Dashes2
Затем я добавляю переформатированные докторские степени в конец приведенного ниже URL-адреса, чтобы получить список всех возможных URL-адресов, которые мне нужны, чтобы очистить информацию о часах обучения и кредитах для каждой программы.
urls <- rbindlist(sapply(Dashes2, function(x) {
url <- paste("http://www.capella.edu/online-degrees/",x,"/", sep="")
data.frame(url)
}), fill=TRUE)
Spec_URLs <- data.frame(urls)
View(Spec_URLs)
Теперь, когда у меня есть список всех URL-адресов, с которых мне нужно извлечь информацию, мне нужно знать, как я могу использовать приведенную ниже функцию для каждого из URL-адресов. Приведенный ниже код извлекает информацию только об оплате обучения и кредитных часах для одного из URL-адресов. Как мне заставить его перебирать все URL-адреса? Моя конечная цель - собрать во фрейм данных таблицу всей информации об обучении и кредитных часах для каждой докторской программы.
fileUrl <- read_html("http://www.capella.edu/online-degrees/phd-leadership/")
Tuition <- fileUrl %>%
html_nodes("p:nth-child(4) strong , .tooltip~ strong") %>%
html_text()
Tuition
Результаты: Стоимость обучения [1] «120 кредитов» «4665 долларов в квартал»