【问题标题】:How to put web scraped numbers into a data frame that adds to the data frame when auto refreshed如何将网络抓取的数字放入数据框中,自动刷新时添加到数据框中
【发布时间】:2019-12-12 02:44:44
【问题描述】:

我想创建一个每次运行我的脚本时都会更新的数据框。我希望一列有数字,另一列有记录日期。这是我目前所拥有的。

# Packages
library(miniUI)
library(shiny)
library(shinyFiles)
library(taskscheduleR)
library(rvest)
library(dplyr)
library(magrittr)

# Read in data
team_trees <- read_html("https://teamtrees.org/")

# Number of Trees
count <- team_trees %>% 
  html_nodes("#totalTrees") %>%
  html_attr("data-count")

total_trees <- count %>%
  as.numeric()
# Columns for data frame
day <- Sys.Date()

data <- data.frame(total_trees, day)
data

如何在每次运行脚本而不是替换数据框时更新此数据框?

【问题讨论】:

  • 您考虑在哪里保存数据?选项:csv、json、feather、database、redis/nosql 等。如果您不是在寻找永久的(即新的 R 会话意味着重新开始),那么也许 if (exists("dat")) { #augment; } else { #create; }

标签: html r dataframe web-scraping


【解决方案1】:

我的第一个想法是 EugeneChong 建议,保存到磁盘。但是,如果您不是在寻找那种持久性:

# ...
if (!exists("data")) data <- NULL
data <- rbind(data, data.frame(total_trees, day))

这不是处理事情的最干净方法(rbinding 数据中的任何失败都可能使所有data 处于错误状态),但因为您没有保存到一个文件,我假设持久性的需求是不同的。

最终,更具弹性的方法将使用 file(csv、json、feather)或 网络存储(SQL、redis)。

【讨论】:

    【解决方案2】:

    每次都将数据写入磁盘对您有用吗?

    library(readr)
    
    old_data <- read_csv("file/path/data.csv")
    
    new_data <- old_data %>% 
      rbind(data.frame(total_trees, day))
    
    write_csv(new_data, "file/path/data.csv")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 2021-11-15
      • 2022-11-28
      相关资源
      最近更新 更多