【发布时间】:2015-08-01 16:19:48
【问题描述】:
请看下面的 R 代码,我正在使用 JSONlite 包从网站上抓取数据:
library(jsonlite)
url <- "http://fantasy.premierleague.com/web/api/elements/"
seasonsdata <- data.frame(matrix(NA,nrow=1,ncol=20))
seasonsdata <- seasonsdata[-1,]
fetchData <- function(i) {res <- try(a <- fromJSON(paste0(url,i)))
if(!inherits(res,"try-error")) {b<-data.frame(a[1],a[20],a[21],as.data.frame(a$season_history))}}
seasonsdata <- lapply(1:696, fetchData)
seasonsdata <-do.call(rbind,lapply(seasonsdata,data.frame,stringsAsFactors=FALSE))
代码至少在 10 点之前可以正常工作,我得到了所需的输出。但是,当我将 'i' 增加到 696 时,我得到了错误:
Error in data.frame(a[1], a[20], a[21], as.data.frame(a$season_history)) :
arguments imply differing number of rows: 1, 0
有什么建议吗?
【问题讨论】:
-
检查
a[1]、a[20]、a[21]和as.data.frame(a$seasonhistory)中的行数。它们需要相同才能创建数据框。看起来您可能需要添加一行代码以在必要时插入NAs。 -
你能帮我纠正一下代码吗?
标签: r web-scraping jsonlite