2014-12-01 57 views
1

我想从这个site读取游戏数据,并使用XML封装这样做:readHTMLTable倒塌span元素

library(XML) 
url <- 'http://scores.nbcsports.msnbc.com/cbk/teamstats.asp?team=1115&report=schedule' 
raw.schedule <- readHTMLTable(url, which=2) 

的问题是,所有的HTML日期列的<span>元素都折叠起来。

R> raw.schedule$Date[1] 
[1] "11/142:30 PM PT3:30 PM MT4:30 PM CT5:30 PM ET10:30 PM GMT6:30 PM 北京时间3:30 PM MST5:30 PM EST" 

理想我想本身如刚才的日期元素:

R> raw.schedule$Date[1] 
    [1] "11/14" 

我已经试过rvest包,但我有同样的问题。是否可以读取此表并保持元素分离,或只选择第一个元素?

回答

2

定义自定义函数来解析表的单元格:

myFun <- function(x){ 
    if(length(y <- getNodeSet(x, "./span[@class=\"shsGameDate\"]")) > 0){ 
    # date column 
    return(xmlValue(y[[1]])) 
    } 
    if(length(y <- getNodeSet(x, "./span[@class=\"shsTimezone shsETZone\"]")) > 0){ 
    # time column 
    return(xmlValue(y[[1]])) 
    } 
    xmlValue(x, encoding = "UTF-8") 
} 

您现在可以使用自定义功能调用readHTMLTable函数来解析细胞:

library(XML) 
url <- 'http://scores.nbcsports.msnbc.com/cbk/teamstats.asp?team=1115&report=schedule' 
raw.schedule <- readHTMLTable(url, which=2, elFun = myFun) 

> head(raw.schedule) 
    Date  Opponent  Time TV  Result 
1 11/14  vs. Yale 5:30 PM ET W 88 - 85 
2 11/18 vs. La Salle 8:00 PM ET L 58 - 60 
3 11/22 at Albany 7:00 PM ET W 76 - 73 
4 11/25 vs. Hartford 7:00 PM ET L 50 - 54 
5 11/30 vs. Vermont 1:00 PM ET W 89 - 73 
6 12/5  at Siena 7:00 PM ET  Tickets