我正在尝试从此site获取游戏数据并使用XML包执行此操作:
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包,但我遇到了同样的问题。是否可以读取此表并保持<span>
元素分开,或者只选择第一个元素?
答案 0 :(得分: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