2012-09-05 84 views

回答

10

它結束了一個複雜的XPath表達式:

library(XML) 
sitePage<-htmlParse("http://ipt.humboldt.org.co/") 
hyperlinksYouNeed<-getNodeSet(sitePage,"//table[@id='resourcestable'] 
             //td[5][.='Specimen'] 
             /preceding-sibling 
             ::td[3] 
             /a 
             /@href") 

,但讓我解釋一下XPath表達式逐位:

  • //table[@id='resourcestable'] - >這樣,我們所得到的主表在頁面上稱爲'resourcestable'

  • //td[5][.='Specimen'] - >現在我們只過濾這些行的類型爲標本

  • /preceding-sibling - >現在我們開始向後看

  • ::td[3] - > 3個步驟是我們在哪裏向後精確計數。小心前同輩開始倒數​​,因此TD [1]是類型列,TD [2]是組織柱和TD [3]是我們想要的名稱列。

  • /a - >現在明白了包括一個節點

  • /@href - >最後更精確的href屬性內容

5
xmlFun<-function(x){ 
    y<-xpathSApply(x,'./a',xmlAttrs) 
    if(length(y)>0){ 
     list(href=y,orig=xmlValue(x)) 
    }else{ 
     xmlValue(x) 
    } 
} 
ans<-readHTMLTable(tableNodes[[1]],elFun=xmlFun,stringsAsFactors = FALSE) 
ans$Name<-lapply(ans$Name,function(x){unlist(eval(parse(text=x)))}) 
ans$Name[ans$Subtype=='Specimen']