2012-09-05 17 views
8

Sto cercando di estrarre i collegamenti dalla seguente pagina web http://ipt.humboldt.org.co/ che sono di tipo "Campione". Posso ottenere la tabella dalla pagina web utilizzando il seguente codice:Estrai collegamenti dalla tabella html

library(XML) 
sitePage<-htmlParse("http://ipt.humboldt.org.co/") 
tableNodes<-getNodeSet(sitePage,"//table") 
siteTable<-readHTMLTable(tableNodes[[1]]) 

Tuttavia i collegamenti mancano dopo aver utilizzato il comando readHTML.

risposta

10

è finito per essere un'espressione XPath intricato:

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

ma lasciatemi spiegare l'espressione XPath bit-per-bit:

  • //table[@id='resourcestable'] -> In questo modo stiamo ottenendo il principale tabella nella pagina chiamata 'resourcestable'

  • //td[5][.='Specimen'] -> Ora stiamo filtrando solo queste righe che hanno Tipo come campione

  • /preceding-sibling -> Ora cominciamo a guardare indietro

  • ::td[3] -> 3 passaggi per essere precisi il conteggio a ritroso da dove siamo. Fare attenzione preceding-sibling iniziare il conteggio a ritroso quindi td [1] è il tipo colonna, TD [2] è il colonna e td Organization [3] è il nome colonna che vogliamo.

  • /a -> ora ottenere il incluso un nodo

  • /@href - contenuti> e, infine, più precisamente l'attributo 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']