使用rvest提取Forexfactory经济日历修订值:无值返回空/NA的问题
解决Forex Factory经济日历修订值提取问题
我帮你梳理下怎么搞定这个提取修订值的需求!从你描述的情况来看,问题大概率出在节点定位或者属性/文本提取的方式上,咱们一步步来:
第一步:先确认目标节点的存储结构
Forex Factory的经济日历里,修订值通常是存在元素的title属性里(就是鼠标悬停时显示的提示文本),但首先你得确保选中的是正确的节点——比如那些带有修订提示的数值元素,而不是父级的行或单元格。
你可以先打印单个节点的所有属性,确认修订值藏在哪里:
# 加载rvest library(rvest) # 查看第一个节点的所有属性 html_attrs(your_nodeset[[1]])
如果输出里有title属性,且值就是类似Revised From -0.6%的文本,那咱们就瞄准这个属性提取;如果没有,再看看是不是节点里的子元素文本包含修订信息。
第二步:批量提取并处理空值
用purrr的map_chr来遍历所有节点,提取目标内容,同时把空值转换成NA:
library(purrr) # 提取修订值,无值则返回NA revised_col <- map_chr(your_nodeset, function(node) { # 尝试提取title属性 rev_text <- html_attr(node, "title") # 判断是否为空或不存在,是则返回NA,否则保留原文本 ifelse(is.na(rev_text) || rev_text == "", NA_character_, rev_text) }) # 把结果添加到你的数据框中 your_data_frame$revised_value <- revised_col
特殊情况处理
如果修订值不是存在title属性里,而是节点的子元素文本(比如一个隐藏的<span>),那可以把html_attr换成html_text,再做判断:
revised_col <- map_chr(your_nodeset, function(node) { rev_text <- html_text(node, trim = TRUE) ifelse(rev_text == "", NA_character_, rev_text) })
关键提醒
一定要确保your_nodeset是直接指向包含修订信息的元素,而不是更大的父节点。比如如果是经济日历的每一行,你需要先定位到行里的"实际值"单元格,再从这个单元格里提取带修订提示的子节点。
内容的提问来源于stack exchange,提问作者Smon
相关产品推荐
相关产品推荐

