从html表中提取链接

Jor*_*uez 8 html xml r web-scraping

我正在尝试从以下网页http://ipt.humboldt.org.co/中提取"Specimen"类型的链接.我可以使用以下代码从网页上获取表格:

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

但是,在使用readHTML命令后,链接丢失了.

dim*_*sli 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")
Run Code Online (Sandbox Code Playgroud)

但让我逐位解释XPath表达式:

  • //table[@id='resourcestable'] - >这样我们就可以在名为'resourcestable'的页面上获取主表

  • //td[5][.='Specimen']- >现在我们只过滤那些Type为Specimen的行

  • /preceding-sibling - >现在我们开始向后看

  • ::td[3] - >从我们所处的位置向后精确计数的3个步骤.小心前面的兄弟开始向后计数,因此td [1]是Type列,td [2]是Organization列,td [3]是我们想要的Name列.

  • /a- >现在获取包含节点

  • /@href - >最后更确切地说是href属性内容


use*_*452 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']
Run Code Online (Sandbox Code Playgroud)