我想使用R
的for循环功能从以下网站获取成绩数据:https://www7.nau.edu/pair/reports/ClassDistribution
为了获取表格数据,我必须首先选择年份,然后再选择学院。我需要2015-2019年以及大学内所有学校(ACC,ACM,...,WGS)的数据。当我选择年份和学校时,URL不变,这就是为什么我没有表格数据的原因。非常感谢您的帮助和建议。我能够创建for循环,我只需要查看如何拉出第一个表即可。
我在静态网站上使用以下代码:
library(XML)
library(RCurl)
url <- "https://www7.nau.edu/pair/reports/ClassDistribution"
url.parsed <- htmlParse(getURL(url), asText = TRUE)
tableNodes <- getNodeSet(url.parsed, '//*[@id="pp_table"]/table')
grade_data <- readHTMLTable(tableNodes[[1]], header=F, stringsAsFactors=F)
答案 0 :(得分:3)
这是使用[[{'user': 1, 'rating': 20}, {'user': 2, 'rating': 10}, {'user': 3, 'rating': 10}], [{'user': 4, 'rating': 4}, {'user': 2, 'rating': 80}, {'user': 1, 'rating': 30}]]
的解决方案。
RSelenium
现在,您只需要遍历library(RSelenium)
rD <- rsDriver(browser = c("firefox")) #specify browser type you want Selenium to open
remDr <- rD$client
remDr$navigate("https://www7.nau.edu/pair/reports/ClassDistribution") # navigates to webpage
# select first dropdown list
option <- remDr$findElement(using='id', value="MainContent_TermList")
#get all option values from dropdown list
option_values <- option$getPageSource()[[1]] %>%
str_extract_all("1[0-9]{3}")
#select second dropdown list
option2 <- remDr$findElement(using='id', value="MainContent_SubjectList")
#get all option values from dropdown list
option_values_2 <- option2$getElementText() %>%
str_split("\\n") %>%
unlist()
#### create loop to loop over all tables...
option <- remDr$findElement(using='id', value="MainContent_TermList")
option <- remDr$findElement(using = 'xpath', "//*/option[@value = '1194']") #change '1194' to values in option_values in loop
option$clickElement()
# change dropdown selection
option2 <- remDr$findElement(using='id', value="MainContent_SubjectList")
option2 <- remDr$findElement(using = 'xpath', "//*/option[@value = 'AHB']") #change 'AHB' to values in option_values_2 in loop
option2$clickElement()
# click submit
submit <- remDr$findElement(using='id', value="MainContent_Button1")
submit$clickElement()
#get table
tb <- remDr$findElement(using='id', value="MainContent_GridView1")
tb$getPageSource()[[1]] %>%
read_html() %>%
html_table(fill = TRUE)
和option_values
即可获得表。
答案 1 :(得分:2)
您正在处理一个简单的表格,您需要为每个学期和科目进行更新和提交。硒很好,但我认为这里可能会过分杀伤。 ,
擅长这类事情:
12345,Molly,2.5
54321,Sally 3.5
需要注意的两件事:
ArrayIndexOutOfBoundsException
返回您需要合并的数据帧列表。我推荐rvest::html_session
。