循环抓取的数据以将数据存储在 R 中的数据框中
Posted
技术标签:
【中文标题】循环抓取的数据以将数据存储在 R 中的数据框中【英文标题】:Loop over the scraped data to store the data in dataframe in R 【发布时间】:2020-06-12 07:06:37 【问题描述】:我是 R 新手,目前正在尝试从网络上抓取一些数据。问题是我希望每五分钟运行一次代码,并在每次运行后将数据存储在数据框中。所有抓取的数据都应该存储在同一个数据框中。
示例: 网站上有生产数据,我想把它们刮到R:
A1 A2
100 200
这些数据每 5 分钟更新一次。我想要的是每次更新(或代码运行)时,都会将新数据附加到同一个数据帧中。
Result I want:
A1 A2 Time
100 200 28/02/2020 15:45:45
A1 A2 Time
103 199 28/02/2020 15:50:45
A1 A2 Time
90 194 28/02/2020 15:55:45
……….
目前我只得到了每次运行代码时都会覆盖结果的代码。我现在的代码如下所示:
library(rvest)
library(xml2)
library(plyr)
url <- "myurl"
content <- read_html(url)
dfNEW = data.frame()
Result <- content %>%
html_node("#gauge") %>%
html_attrs() %>%
`[`(c("dataA1", "dataA2"))
df <- as.data.frame(t(Result))
rownames(df) <- c()
df$Time <- Sys.time()
total <- rbind.fill(dfNEW, df)
你知道如何让循环做我想做的事吗?
提前致谢!
【问题讨论】:
你可能想看看这个:***.com/questions/1174799/…。在循环结束时,告诉等待 5 分钟。 谢谢!但我的问题更多是关于每次运行代码时如何将新数据附加到数据帧。 最后一行应该是每 5 分钟更新一次最终数据帧,而不是创建一个新数据帧。比如:total <- rbind.fill(total, dfNEW)
。 total
data.frame 需要先初始化,在循环过程之前。
【参考方案1】:
一个循环可能如下所示:
dfNEW <- data.frame()
for(i in seq(100)
# code to generate new df
df <- as.data.frame(t(Result))
rownames(df) <- c()
df$Time <- Sys.time()
dfNEW <- rbind.fill(dfNEW, df)
Sys.sleep(5*60)
因此,您必须将每个循环中的 data.frame 的新行绑定到已经存在的行。
【讨论】:
以上是关于循环抓取的数据以将数据存储在 R 中的数据框中的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 selectInput 从 R 中的数据框中选择特定列?