2015-06-25 41 views
2

我無法弄清楚爲什麼下面的代碼沒有返回xpath指定的信息。使用rvest返回表的後代

我想選擇在頁面的'核心問題'部分找到的計數數據。我想讓它在第一個問題的表格中工作,然後打算將其擴展爲對頁面上的每個問題/表格執行相同的操作。不幸的是,我可以用它來拉下我感興趣的表格部分。我想象的答案涉及指定我感興趣的< tr>節點的子節點,即多個< td>標籤,但我嘗試這樣做繼續失敗。任何人都可以幫助我指定我感興趣的部分表格嗎? (獎勵積分,如果它可以爲網頁上的所有十張桌子進行!)

library(rvest) 

detailed <- html("https://www.deakin.edu.au/evaluate/results/old/detail-rep.php?schedule_select=1301&faculty_select=01&school_select=0104&unit_select=MIS202&location_select=B") 

q1 <- detailed %>% 
html_nodes(xpath='//*[@id="main"]/div/div/form/fieldset[2]/table[1]/tbody/tr/td[2]/div/table/tbody/tr[5]') %>% 
html_table(header = TRUE, fill=TRUE) 

當我去祖先表它拉低信息,但它是非常混亂和難以解釋。當我嘗試指定此表中的元素時,我無法提取信息。有人能夠向我解釋爲什麼table[1]的後代不被提取?這裏是代碼下拉table[1]

q1 <- detailed %>% 
html_nodes(xpath='//*[@id="main"]/div/div/form/fieldset[2]/table[1]') %>% 
html_table(header = TRUE, fill = TRUE) 
+0

究竟這裏有什麼期望的輸出? 'html_table'函數假定你傳入一個'table'節點。如果您開始選擇表格中更深的元素,則不會起作用。 – MrFlick

回答

2

這是否讓你到你需要的地方?

allqs <- detailed %>% 
    html_nodes(css = ".result center") %>% 
    html_text() 


t(matrix(as.numeric(allqs), 5, 10, dimnames = list(c("Strongly Disagree", "Disagree", "Neutral", "Agree", "Strongly Agree"), 
            paste0("Q", 1:10)))) 

其中給出:

Strongly Disagree Disagree Neutral Agree Strongly Agree 
Q1     0  4  4  9    1 
Q2     1  2  2 11    2 
Q3     0  0  2 11    5 
Q4     1  3  2  9    3 
Q5     0  3  4 10    1 
Q6     0  1  5  7    2 
Q7     0  3  6  6    3 
Q8     1  0  2  7    8 
Q9     0  0  5  7    5 
Q10     0  1  4  7    5 
+0

這很好,謝謝@JayBlack。你會說什麼是瞭解在html_nodes()函數中指定什麼的最好方法?我正在嘗試xpath,但你已經使用了css,什麼表明'css'是要走的路?我最大的問題可能是我沒有任何html體驗......再次感謝 – Adam

+1

如果您還沒有,請閱讀下面的rvest文檔中的小插件 - 它極大地簡化了爲數據抓取選擇正確標籤的過程。 http://cran.r-project.org/web/packages/rvest/vignettes/selectorgadget.html – Jay