Вот мой текущий код:
url <- 'https://uws-community.symplicity.com/index.php?s=student_group'
page <- html_session(url)
get_more_info <- function(more_info, page) {
fb <- html_node(jump_to(page, more_info), xpath = '//*[@id="dnf_class_values_student_group__facebook__widget"]') %>% html_text()
}
get_table <- function(page, count) {
#find group names
name_text <- html_nodes(page,".grpl-name a") %>% html_text()
df <- data.frame(name_text, stringsAsFactors = FALSE)
#find text description
desc_text <- html_nodes(page, ".grpl-purpose") %>% html_text()
df$desc_text <- trimws(desc_text)
#find emails
# find the parent nodes with html_nodes
# then find the contact information from each parent using html_node
email_nodes<-html_nodes(page, "div.grpl-grp") %>% html_node( ".grpl-contact a") %>% html_text()
df$emails<-email_nodes
category_nodes <- html_nodes(page, "div.grpl-grp") %>% html_node(".grpl-type") %>% html_text()
df$category<-category_nodes
pic_nodes <-html_nodes(page, "div.grpl-grp") %>% html_node( ".grpl-logo img") %>% html_attr("src")
df$logo <- paste0("https://uws-community.symplicity.com/", pic_nodes)
more_info_nodes <- html_nodes(page, ".grpl-moreinfo a") %>% html_attr("href")
df$more_info <- more_info_nodes
df$fb <- lapply(df$more_info, get_more_info, page)
if(count != 44) {
return (rbind(df, get_table(page %>% follow_link(css = ".paging_nav a:last-child"), count + 1)))
} else{
return (df)
}
}
RSO_data <- get_table(page, 0)
Так что это прекрасно работает, если я удаляю
df$fb <- lapply(df$more_info, get_more_info, page)
, но мне нужна информация, которую мне дает эта строка. Я получаю сообщение об ошибке:
Error in `$<-.data.frame`(`*tmp*`, "logo", value = "https://uws-community.symplicity.com/") :
replacement has 1 row, data has 0
Не имеет смысла, почему ошибка будет с линией сглаживания логотипа, когда часть, которую я добавляю, имеет отношение к функции get_more_info, которая использует функцию jump_to.
Что я здесь не так делаю? Я знаю, что это связано с функцией get_more_info, но я не знаю, что мне нужно исправить.