从多个列的表中提取html链接

时间:2015-07-01 06:08:12

标签: xml r

我无法将HTML表读入R中,从而将超链接保存在表格的单元格中。我找到了这个解决方案(Extract links from html table),但我相信第二个答案中提供的功能仅在HTML表格中包含单个列的链接时起作用,而我无法找到使其适用于表格的解决方案多列中的链接。

例如,我想从;

中提取表格

http://www.sports-reference.com/olympics/countries/NED/

但是我不想仅使用XML中的基本readHTMLTable函数,而是想知道如何构造一个函数放入elFun部分,以便第一行看起来可以包含而不是“ 2014年冬季“将包含”/奥运会/国家/ NED /冬季/ 2014 /“。

此外,我想在每个单元格中保留多个链接,如Top Medalists的第三行。

谢谢!

1 个答案:

答案 0 :(得分:1)

也许以此为出发点:

library(XML)
getHrefs <- function(node, encoding) 
  if (!is.null(xmlChildren(node)$a)) { 
    paste(xpathSApply(node, './a', xmlGetAttr, "href"), collapse = ",")
  } else {
    return(xmlValue(xmlChildren(node)$text))
  }
head( readHTMLTable("http://www.sports-reference.com/olympics/countries/NED/", which = 1, elFun = getHrefs)  )
# Rk                                Games                                          Flag Bearer Participants Men Women Sports Gold Silver Bronze Total                                                                    Top Medalist(s)
# 1  1 /olympics/countries/NED/winter/2014/         /olympics/athletes/te/jorien-ter-mors-1.html           39  20    19      4    8      7      9    24                                            /olympics/athletes/wu/ireen-wust-1.html
# 2  2 /olympics/countries/NED/summer/2012/ /olympics/athletes/va/dorian-van-rijsselberge-1.html          173  94    79     19    6      6      8    20                                   /olympics/athletes/kr/ranomi-kromowidjojo-1.html
# 3  3 /olympics/countries/NED/winter/2010/            /olympics/athletes/be/timothy-beck-1.html           32  15    17      4    4      1      3     8 /olympics/athletes/kr/sven-kramer-1.html,/olympics/athletes/tu/mark-tuitert-1.html
# 4  4 /olympics/countries/NED/summer/2008/           /olympics/athletes/de/jeroen-delmee-1.html          237 139    98     20    7      5      4    16                                     /olympics/athletes/va/anky-van-grunsven-1.html
# 5  5 /olympics/countries/NED/winter/2006/                 /olympics/athletes/bo/jan-bos-1.html           33  16    17      4    3      2      4     9                                                           4 athletes with 2 medals
# 6  6 /olympics/countries/NED/summer/2004/           /olympics/athletes/hu/mark-huizinga-1.html          210 134    76     22    4      9      9    22                                        /olympics/athletes/de/inge-de-bruijn-1.html