【问题标题】:Loop over the scraped data to store the data in dataframe in R循环抓取的数据以将数据存储在 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)

你知道如何让循环做我想做的事吗?

提前致谢!

【问题讨论】:

  • 你可能想看看这个:stackoverflow.com/questions/1174799/…。在循环结束时,告诉等待 5 分钟。
  • 谢谢!但我的问题更多是关于每次运行代码时如何将新数据附加到数据帧。
  • 最后一行应该是每 5 分钟更新一次最终数据帧,而不是创建一个新数据帧。比如:total &lt;- rbind.fill(total, dfNEW)total data.frame 需要先初始化,在循环过程之前。

标签: r loops web-scraping rvest


【解决方案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 的新行绑定到已经存在的行。

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多