2016-08-19 3 views
0

이 문제를 해결하기 위해 Stackoverflow 사용자로부터 도움을 받았습니다. 그러나, 나는 새로운 문제로 실행 :Webscraping html table using R

URL <- "http://karakterstatistik.stads.ku.dk/Histogram/ASOB05038E/Summer-2015" 
pg <- read_html(URL) 

get_val <- function(x, label) { 
xpath <- sprintf(".//table/tr/td[contains(., '%s')][1]/following-sibling::td", label) 
html_nodes(x, xpath=xpath) %>% 
html_text() %>% 
trimws() 
} 

library("stringr") 
trimmed = get_val(pg, "Karakter") %>% 
    str_replace_all(pattern = "\\n|\\t|\\r" , 
       replacement = "") 
trimmed 

나는 재시험 및 시험 모두에 대한 시험 결과를 얻을 싶어하지만 두 테이블의 헤드 라인이 모두 동일하기 때문에, R 만의 값을 취 다시 찍었다. 구체적으로 말하면, 표제 아래 두 테이블의 12, 10, 7, 4, 02, 00, -3 학년 옆에 열 "Antal"을 표시하고 싶습니다.

어떤 도움을 주실 수 있습니까? 많이 감사하겠습니다! :)

답변

0
results <- html_nodes(pg, xpath=".//td[@style='width: 50%;' and 
             descendant::h3[contains(text(), 'Resultater')]]/table") 

html_table(results[[1]]) 
## Karakter Antal Antal 
## 1  12 11 (9,6 %) 
## 2  10 48 (41,7 %) 
## 3  7 41 (35,7 %) 
## 4  4  4 (3,5 %) 
## 5  02  1 (0,9 %) 
## 6  00  1 (0,9 %) 
## 7  -3  4 (3,5 %) 
## 8 Ej mødt  5 (4,3 %) 

html_table(results[[2]]) 
## Karakter Antal Antal 
## 1  12  0 (0,0 %) 
## 2  10  0 (0,0 %) 
## 3  7  1 (9,1 %) 
## 4  4  1 (9,1 %) 
## 5  02  1 (9,1 %) 
## 6  00  1 (9,1 %) 
## 7  -3  0 (0,0 %) 
## 8 Ej mødt  7 (63,6 %)