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

如何用R从Yahoo Finance抓取多只股票的历史财报数据?

当然可以!用R抓取Yahoo Finance的历史财务报表(利润表、资产负债表、现金流量表)完全没问题,我给你整理了两种实用的方法,上手都不难:

方法1:用tidyquant包(推荐,简单高效)

tidyquant是基于tidyverse的量化分析工具包,封装了Yahoo Finance的接口,能直接拉取标准化的财务数据,不用自己处理网页结构。

  1. 先安装并加载包:
install.packages("tidyquant")
library(tidyquant)
  1. 抓取单只股票的财务数据:
  • 利润表(默认年度数据,要季度的话加period = "quarterly"):
aapl_income <- tq_get("AAPL", get = "financials", period = "yearly")
  • 资产负债表:
aapl_balance <- tq_get("AAPL", get = "balance_sheet", period = "yearly")
  • 现金流量表:
aapl_cashflow <- tq_get("AAPL", get = "cash_flow", period = "yearly")

返回的结果是tidy格式的数据框,直接就能用dplyr、ggplot2这些工具分析。

方法2:用rvest直接网页抓取(灵活自定义)

如果tidyquant的接口有变动,或者你需要更定制化的数据提取,可以直接用rvest爬取网页内容。以AAPL的利润表为例:

  1. 安装并加载所需包:
install.packages(c("rvest", "dplyr", "purrr"))
library(rvest)
library(dplyr)
library(purrr)
  1. 抓取并处理利润表数据:
# 利润表网页URL
url_income <- "https://finance.yahoo.com/quote/AAPL/financials?p=AAPL"
page_income <- read_html(url_income)

# 提取表格数据并整理
income_table <- page_income %>%
  html_table(fill = TRUE) %>%
  pluck(1) %>%  # 取第一个表格(Yahoo的财务报表是第一个表格)
  rename(Metric = 1) %>%  # 把第一列重命名为Metric
  filter(Metric != "")  # 过滤空行

要抓取资产负债表或现金流量表,只需要把URL里的financials换成balance-sheet或cash-flow就行。不过要注意:Yahoo的网页结构可能会更新,所以如果代码失效,需要检查网页的表格结构,调整提取逻辑。

批量处理多只股票

如果要同时分析多只股票,用purrr的map函数就能批量抓取:

# 定义要分析的股票代码列表
tickers <- c("AAPL", "MSFT", "GOOGL")

# 批量抓取利润表数据
all_income_statements <- map(tickers, ~tq_get(.x, get = "financials")) %>%
  set_names(tickers)  # 给列表元素命名为股票代码

# 查看其中一只的结果
all_income_statements$AAPL
注意事项
  • Yahoo Finance的API或网页结构可能会不定期变更,所以如果某段代码突然失效,记得检查包的最新版本或网页结构
  • 有些财务数据可能存在缺失值,抓取后记得用na.omit()或其他方法清理数据
  • 不要频繁请求Yahoo的服务器,避免被限制访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:00:33