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

基于日期循环遍历URL并存储数据至数据框报错求助

解决遍历日期抓取哈萨克斯坦国家银行数据的问题

首先看你给出的代码片段,最明显的问题是paste0语句没有完成日期的拼接,而且缺少网页解析和数据存储的关键步骤。我来帮你完善整个流程,确保能正确遍历日期并把数据存入数据框:

1. 先加载必要的包

首先需要安装并加载用于网页抓取和数据处理的包:

# 安装需要的包(如果没安装过)
install.packages(c("rvest", "dplyr", "lubridate"))

# 加载包
library(rvest)
library(dplyr)
library(lubridate)

2. 修正日期遍历和URL拼接

你的日期序列生成是对的,但URL拼接需要把date变量转换成YYYY-MM-DD格式插入到链接里,注意原URL里的&其实是HTML转义的&,直接用&就行:

StartDate <- "2015-01-01"
EndDate <- "2017-07-10"
dates <- seq(as.Date(StartDate, format="%Y-%m-%d"), 
             as.Date(EndDate, format="%Y-%m-%d"), 
             by='days')

# 初始化空列表存储数据
ML <- list()

3. 完善循环内的抓取逻辑

循环里需要处理每个日期的URL,抓取网页数据,还要加错误处理避免某个日期出错导致整个循环中断:

for (i in seq_along(dates)) {
  current_date <- dates[i]
  # 拼接正确的URL,把日期转成字符串格式
  url <- paste0("http://nationalbank.kz/?docid=105&cmomdate=", 
                format(current_date, "%Y-%m-%d"), 
                "&switch=english")
  
  # 尝试抓取网页,加错误处理
  tryCatch({
    # 读取网页
    page <- read_html(url)
    
    # 这里需要根据网页实际结构提取数据,假设数据在表格里
    # 比如提取第一个表格的内容,你需要根据实际网页调整选择器
    data_table <- page %>%
      html_element("table") %>%  # 替换成实际的表格选择器,比如".data-table"
      html_table(header = TRUE)
    
    # 给数据添加日期列
    data_table$date <- current_date
    
    # 存入列表
    ML[[i]] <- data_table
    
    # 打印进度,方便跟踪
    cat("Successfully fetched data for", current_date, "\n")
  }, error = function(e) {
    # 捕获错误,打印信息继续循环
    cat("Failed to fetch data for", current_date, "Error:", e$message, "\n")
    ML[[i]] <- NULL  # 出错的位置存入空值,后续可以过滤掉
  })
  
  # 加个延迟,避免请求太频繁被网站封禁
  Sys.sleep(1)
}

4. 把列表转换成数据框

循环结束后,把列表里的有效数据合并成一个数据框:

# 过滤掉空值,合并所有数据
final_df <- bind_rows(ML)

# 查看结果
head(final_df)

关键注意事项

  • 网页选择器调整:上面的html_element("table")是通用写法,你需要打开目标网页,用浏览器的开发者工具(F12)查看实际的表格CSS选择器或XPath,替换成正确的选择器才能准确提取数据。
  • 反爬机制:添加Sys.sleep(1)是为了避免短时间内发送大量请求被网站封禁,如果还是被限制,可以适当延长延迟时间。
  • 日期有效性:有些日期可能是节假日,网站没有数据,tryCatch会捕获这些错误,保证循环继续运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:24:10