所以这就是它.请记住,在编写代码时我完全是绿色的,而且我没有R之外的经验.
上下文 – 我想要抓取的每个页面都有一个遵循以下格式的URL:
http://www.hockey-reference.com/friv/dailyleaders.cgi?month=10和天= 8&安培;年= 2014
此网址中更改的变量是月,日和年(以粗体显示)
网址应从10-8-2014开始,到2015年6月18日结束.当然不是每天都有NHL游戏,所以有些页面会空白.
所有其他页面都有一个用于玩家的HTML表格和一个守门员表格.
我已经想出了如何抓取并导出到csv只是一个单页,并且不知道从哪里开始制作它以便我可以在上一季的每一场比赛中一举一动(落在我的日期之内)上面已经提到过)
代码如下:
library(XML) NHL <- htmlParse("http://www.hockey-reference.com/friv/dailyleaders.cgi?month=10&day=8&year=2014") class(NHL) NHL.tables <- readHTMLTable(NHL,stringAsFactors = FALSE) length(NHL.tables) head(NHL.tables[[1]]) tail(NHL.tables[[1]]) head(NHL.tables[[2]]) tail(NHL.tables[[2]]) write.csv(NHL.tables,file = "NHLData.csv")
提前致谢!
解决方法
我不确定你是怎么写csv的,但是这里你可以得到这些日期之间的所有表格.我在前几个网址上对此进行了测试,效果很好.请注意,在读取表之前不需要解析html,因为readHTMLTable()能够直接从URL读取和解析.
library(XML) library(RCurl) # create the days x <- seq(as.Date("2014-10-12"),as.Date("2015-06-18"),by = "day") # create a url template for sprintf() utmp <- "http://www.hockey-reference.com/friv/dailyleaders.cgi?month=%d&day=%d&year=%d" # convert to numeric matrix after splitting for year,month,day m <- do.call(rbind,lapply(strsplit(as.character(x),"-"),type.convert)) # create the list to hold the results tables <- vector("list",length(allurls)) # get the tables for(i in seq_len(nrow(m))) { # create the url for the day and if it exists,read it - if not,NULL tables[[i]] <- if(url.exists(u <- sprintf(utmp,m[i,2],3],1]))) readHTMLTable(u,stringsAsFactors = FALSE) else NULL }
lapply(tables[[1]],dim) # $skaters # [1] 72 23 # # $goalies # [1] 7 15
上面的for()循环将构造一个URL,然后检查它是否存在于序列中的每一天.如果存在,我们继续阅读当天的表格.如果不是,那个list元素将为NULL.请看看这个,如果它适合你,那么我们将把它写入文件.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。