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

在R中构建自动增长数据帧实现网页爬取股票数据的增量追加

自动爬取并追加股票数据的实现方案

1. 封装单次爬取逻辑为可复用函数

将你已完成的单次爬取、数据清洗逻辑打包成独立函数,同时增加异常捕获逻辑,避免单次爬取失败导致整个脚本终止,同时新增爬取时间戳字段方便后续数据溯源。

library(tidyverse)
library(rvest)

# 封装单次爬取西班牙35指数成分股涨跌幅的函数
fetch_spain35_pct <- function() {
  tryCatch({
    web <- read_html("https://uk.investing.com/indices/spain-35-components")
    tables <- web %>% html_table()
    res <- tables[[2]] %>%
      select(where(~sum(!is.na(.x)) > 0)) %>%
      rename(Var_pct = `Chg. %`) %>%
      select(-High, -Low, -Chg., -Vol., -Last, -Time) %>%
      pivot_wider(names_from = Name, values_from = Var_pct) %>%
      # 新增爬取时间戳,作为每行数据的时间标识
      mutate(fetch_time = Sys.time(), .before = 1)
    return(res)
  }, error = function(e) {
    message("本次爬取失败:", e$message)
    return(NULL)
  })
}

2. 数据追加逻辑实现

使用tidyverse提供的bind_rows函数完成新数据追加,比基础包的rbind兼容性更强,同时增加本地持久化逻辑,避免脚本意外终止导致数据丢失。

# 初始化存储数据集:如果本地有历史数据直接读取,没有则首次爬取生成初始数据集
if (file.exists("spain35_historical.csv")) {
  live_var <- read_csv("spain35_historical.csv", show_col_types = FALSE)
} else {
  live_var <- fetch_spain35_pct()
  write_csv(live_var, "spain35_historical.csv")
}

3. 定时自动爬取设置

如果需要按固定间隔自动爬取追加数据,可以用简单的循环+等待逻辑实现:

# 爬取间隔设置,单位为秒,示例为300秒=5分钟,可根据需求调整,不要设置过短给目标站点造成压力
fetch_interval <- 300

while(TRUE) {
  new_data <- fetch_spain35_pct()
  # 仅爬取成功时执行追加操作
  if (!is.null(new_data)) {
    live_var <- bind_rows(live_var, new_data)
    # 同步写入本地文件持久化
    write_csv(live_var, "spain35_historical.csv")
    message(Sys.time(), " 数据追加成功,当前累计行数:", nrow(live_var))
  }
  # 等待到下一次爬取时间
  Sys.sleep(fetch_interval)
}

注意事项

  • 需要终止脚本运行时,直接在R控制台按ESC键即可
  • 如果你不需要全自动定时运行,仅需要每次手动执行追加,只需要调用new_data <- fetch_spain35_pct()后执行live_var <- bind_rows(live_var, new_data)即可
  • 涨跌幅字段默认是带百分号的字符格式,后续做数值分析时可以用str_remove(Var_pct, "%") %>% as.numeric()转换为数值格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 19:57:05