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

R爬取Yahoo Finance数据不全:如何修改代码获取完整表格数据?

解决Yahoo Finance IVV行情数据爬取缺失问题

问题说明

使用R代码爬取Yahoo Finance上IVV的行情页面时,能准确定位目标URL和节点,但返回的数据存在缺失(如前收盘价、开盘价等字段为空或未成功获取),需修改代码以获取图表下方第一个表格的所有数值。

原代码问题分析

  • 老旧的User-Agent易被网站反爬机制识别,导致部分数据未正常返回
  • XPath选择器使用的class已失效,且仅提取span文本,无法完整匹配字段与对应数值
  • 未对提取数据做结构化处理,无法直观对应各行情字段

修改后的代码

library(rvest)
library(httr)
library(dplyr)

ticker <- "IVV"
url <- paste0("https://finance.yahoo.com/quote/", ticker, "/")

# 使用现代浏览器的User-Agent
browser_ua <- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
head <- c(
  "Accept" = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  "Accept-Language" = "en-US,en;q=0.9"
)

# 创建会话并获取页面
html_page <- session(
  url,
  user_agent(browser_ua),
  add_headers(head)
)

# 定位图表下方第一个行情表格的所有列表项
temp <- html_page %>% 
  read_html() %>%
  xml_find_all("//div[contains(@class, 'yf-3a2v0c')]/ul/li")

# 提取每个列表项的字段名称和对应数值
data_list <- lapply(temp, function(x) {
  field <- x %>% xml_find_first(".//span[1]/text()") %>% xml_text()
  value <- x %>% xml_find_first(".//span[2]/text()") %>% xml_text()
  tibble(字段 = field, 数值 = value)
})

# 合并为完整的数据框
result <- bind_rows(data_list)
print(result)

关键修改点

  • 更新User-Agent:使用现代Chrome浏览器的UA,避免被反爬机制拦截,确保页面完整加载
  • 修正XPath选择器:定位到行情表格的父容器(yf-3a2v0c),遍历每个列表项分别提取字段名和数值,保证字段与数据一一对应
  • 结构化数据整理:将零散文本转换为键值对形式的数据框,方便后续查看与使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 14:50:55