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

如何使用R语言爬取B3交易所iFrame页面的参考利率数据

问题原因

你运行代码返回全为NA主要有三个核心原因:

  • 直接提取页面所有<td>节点,其中混杂了大量非数字内容(如合约到期月份、合约代码等文本字段),强制转为数值型时非数字内容会被直接转为NA
  • 未定位到目标数据表格,抓取的<td>包含了页面顶部筛选栏等冗余区域的内容
  • 提取的文本存在首尾空白字符,未做清理直接进行类型转换也会导致转换失败
修正后的实现代码
library(rvest)
library(stringr)
library(dplyr)

html_url <- "https://www2.bmf.com.br/pages/portal/bmfbovespa/lumis/lum-sistema-pregao-ptBR.asp?Data=23/09/2021&Mercadoria=DI1"

# 读取页面时指定latin1编码,避免葡萄牙语特殊字符乱码
html <- read_html(html_url, encoding = "latin1")

# 直接提取页面所有表格,指定逗号为小数点标识,自动填充不规整单元格
all_tables <- html %>% 
  html_table(fill = TRUE, dec = ",")

# 页面第二个表格为DI1合约的交易数据主表,第一个为顶部筛选条件表
di1_data <- all_tables[[2]]

# 可选:数据清洗步骤
# 1. 清理列名首尾空白
colnames(di1_data) <- str_squish(colnames(di1_data))
# 2. 按需对指定数值列做格式转换,跳过合约代码、到期日等文本列
numeric_col_list <- c("Abertura", "Máxima", "Mínima", "Variação", "Preço de Ajuste")
di1_data <- di1_data %>%
  mutate(across(all_of(numeric_col_list), ~ as.numeric(str_replace(.x, ",", "."))))
补充说明

如果需要批量爬取不同日期、不同品种的数据,只需要修改url中Data和Mercadoria的参数值即可,注意日期格式为日/月/年。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:27:03