2014-12-01 102 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