加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – 使用R来抓取多个页面

发布时间:2020-12-16 22:46:56 所属栏目:百科 来源:网络整理
导读:所以这就是它.请记住,在编写代码时我完全是绿色的,而且我没有R之外的经验. 上下文 – 我想要抓取的每个页面都有一个遵循以下格式的URL: http://www.hockey-reference.com/friv/dailyleaders.cgi?month=10和天= 8安培;年= 2014 此网址中更改的变量是月,日和
所以这就是它.请记住,在编写代码时我完全是绿色的,而且我没有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
}

str()很长,所以这里是第一个元素尺寸的一小部分

lapply(tables[[1]],dim)
# $skaters
# [1] 72 23
#
# $goalies
# [1]  7 15

上面的for()循环将构造一个URL,然后检查它是否存在于序列中的每一天.如果存在,我们继续阅读当天的表格.如果不是,那个list元素将为NULL.请看看这个,如果它适合你,那么我们将把它写入文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读