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属性内容
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)
| 归档时间: |
|
| 查看次数: |
2595 次 |
| 最近记录: |