从html表中提取链接

时间:2012-09-05 22:00:12

标签: html xml r web-scraping

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

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

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

2 个答案:

答案 0 :(得分: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'] - &gt;这样我们就可以在名为“resourcestable”

  • 的页面上获取主表
  • //td[5][.='Specimen'] - &gt;现在我们只过滤那些Type为 Specimen

  • 的行
  • /preceding-sibling - &gt;现在我们开始向后看

  • ::td[3] - &gt;从我们所处的位置向后精确计算3个步骤。注意前兄弟开始向后计数,因此td [1]是 Type 列,td [2]是 Organization 列和td [ 3]是我们想要的 Name 列。

  • /a - &gt;现在获取包含的 a 节点

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

答案 1 :(得分: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']