You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言实现定时网页抓取并追加至同一DataFrame的方法求助

解决R语言定时抓取网页数据并追加到DataFrame的问题

嗨,作为R新手能尝试网页抓取已经很棒啦!你的问题核心有两个:一是每次运行代码时没有保留之前的数据(因为你每次都把dfNEW初始化为空数据框),二是缺少定时重复执行的逻辑。下面给你两种常见场景的解决方案:

场景1:让脚本持续运行,自动每5分钟抓取一次

这种适合你希望打开R后让程序一直后台跑的情况,代码逻辑是:先初始化总数据框,然后用循环不断抓取、追加、等待。

library(rvest)
library(plyr)

# 1. 初始化总数据框(放在循环外面,只执行一次)
total_df <- data.frame()
url <- "myurl"

# 2. 设置循环(这里用while TRUE会无限运行,你可以加终止条件,比如运行10次)
run_times <- 0
max_runs <- 10  # 比如最多抓10次,不想限制就去掉这个条件,用while(TRUE)

while(run_times < max_runs) {
  # 3. 抓取网页数据
  content <- read_html(url)
  Result <- content %>% html_node("#gauge") %>% html_attrs() %>% `[`(c("dataA1", "dataA2"))
  df <- as.data.frame(t(Result))
  rownames(df) <- c()
  df$Time <- Sys.time()
  
  # 4. 追加到总数据框
  total_df <- rbind.fill(total_df, df)
  
  # 5. 打印进度(可选,方便看运行情况)
  run_times <- run_times + 1
  cat(sprintf("完成第%d次抓取,当前总数据行数:%d\n", run_times, nrow(total_df)))
  
  # 6. 等待5分钟(300秒),如果是最后一次就不用等了
  if(run_times < max_runs) {
    Sys.sleep(300)
  }
}

# 最后可以把数据保存到本地,防止丢失
saveRDS(total_df, "production_data.rds")
# 后续读取可以用:total_df <- readRDS("production_data.rds")

场景2:手动/系统定时任务(比如Windows任务计划、Linux Cron)每次运行脚本

如果是通过系统定时任务每隔5分钟跑一次脚本,那每次运行时需要先读取之前保存的总数据,追加新数据后再保存回去:

library(rvest)
library(plyr)

url <- "myurl"
data_file <- "production_data.rds"

# 1. 读取已有的总数据(如果文件不存在就初始化空数据框)
if(file.exists(data_file)) {
  total_df <- readRDS(data_file)
} else {
  total_df <- data.frame()
}

# 2. 抓取新数据
content <- read_html(url)
Result <- content %>% html_node("#gauge") %>% html_attrs() %>% `[`(c("dataA1", "dataA2"))
df <- as.data.frame(t(Result))
rownames(df) <- c()
df$Time <- Sys.time()

# 3. 追加数据并保存
total_df <- rbind.fill(total_df, df)
saveRDS(total_df, data_file)

cat(sprintf("本次抓取完成,当前总数据行数:%d\n", nrow(total_df)))

为什么你原来的代码会覆盖数据?

你原来每次运行都把dfNEW设为空数据框,total <- rbind.fill(dfNEW, df)自然就只有本次的新数据。不管用哪种方案,核心都是要把总数据存储在循环/脚本运行之外的地方:要么是持续运行时的全局变量,要么是本地文件。

内容的提问来源于stack exchange,提问作者JaneJane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:17:42