8

次の Web ページhttp://ipt.humboldt.org.co/から「標本」タイプのリンクを抽出しようとしています。次のコードを使用して、Web ページからテーブルを取得できます。

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

ただし、readHTML コマンドを使用した後、リンクが表示されません。

4

2 に答える 2

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']-> Type がSpecimenの行のみをフィルタリングします。

  • /preceding-sibling-> 今、私たちは後ろを振り返り始めます

  • ::td[3]-> 正確には、現在地から逆算して 3 ステップです。前の兄弟は逆方向にカウントを開始することに注意してください。したがって、td[1] はType列、td[2] はOrganization列、td[3] は目的のName列です。

  • /a-> 含まれているノードを取得します

  • /@href-> そして最後に、より正確には href 属性のコンテンツ

于 2012-09-06T00:55:14.327 に答える
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']
于 2012-09-07T15:39:35.470 に答える