首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用R爬行多个页面

使用R爬行多个页面
EN

Stack Overflow用户
提问于 2015-08-29 16:42:22
回答 1查看 695关注 0票数 4

就这样开始了。请记住,在编写代码时,我完全是绿色的,我在R之外没有任何经验。

上下文--我想爬行的每一页都有一个遵循以下格式的URL:

http://www.hockey-reference.com/friv/dailyleaders.cgi?month=10&day=8&year=2014

此url中更改的变量是月、日和年份(以粗体表示)。

网址应从10-8至2014年开始,至6-18-2015年结束。当然,不是每天都有一个NHL游戏,所以有些网页将是空白的。

所有其他页面都有一个用于球员的HTML表和一个用于守门员的表。

我已经想出了如何爬行和导出到csv只有一页,并且不知道从这里到哪里去做它,这样我就可以一举完成上个赛季的每一场比赛(在我上面提到的日期之内)。

守则如下:

代码语言:javascript
运行
复制
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")

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-29 17:03:53

我不知道你想如何写csv的,但这里是如何得到所有的表之间的日期。我在最初的几个URL上测试了这个,它运行得很好。注意,在读取表之前不需要解析html,因为readHTMLTable()能够直接从URL读取和解析。

代码语言:javascript
运行
复制
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], m[i, 3], m[i, 1]))) 
    readHTMLTable(u, stringsAsFactors = FALSE) 
  else NULL
}

str()相当长,所以下面是对第一个元素的尺寸的一个小小的观察

代码语言:javascript
运行
复制
lapply(tables[[1]], dim)
# $skaters
# [1] 72 23
#
# $goalies
# [1]  7 15

上面的for()循环将构造一个URL,然后检查它是否存在于我们序列中的每一天。如果存在,我们将继续阅读当天的表。如果不是,列表元素将是NULL。请看一下这个,如果它对您有效,那么我们将致力于将它写到文件中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32288381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档