R 代码:来自雅虎财经的 ETF 汇总统计数据

问题描述 投票:0回答:1

我试图从雅虎财经获取 ETF 摘要统计数据。例如,页面链接为https://finance.yahoo.com/quote/IVV。图表下方是要抓取的表格,关键字段是资产净值、市盈率 TTM、收益率、贝塔值和费用比率。我以前使用过 rvest 包,如下所示,但它不再起作用,因为我怀疑页面结构已经改变

ticker <- "IVV"
url <- paste0("https://finance.yahoo.com/quote/",ticker)
df <- url %>%
      read_html() %>%
      html_table() %>%
      map_df(bind_cols) %>%
      as_tibble()

任何帮助表示赞赏

r yahoo-finance
1个回答
0
投票

该链接中似乎不再有表格元素,因为您要查找的信息现在包含在列表元素中。我已经调整了代码以捕获每个列表元素中的标签和值。

library(rvest)
library(purrr)
library(dplyr)

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

ivv_html <- read_html(url)

node_txt <- ".svelte-tx3nkj" # This contains "table" info of interest

df <- ivv_html %>% 
  html_nodes(paste0(".container", node_txt)) %>%
  map_dfr(~{
    tibble(
      label = html_nodes(.x, paste0(".label", node_txt)) %>% 
        html_text(trim = TRUE)
      ,value = html_nodes(.x, paste0(".value", node_txt)) %>% 
        html_text(trim = TRUE)
    )
  })

df %>% 
  filter(label %in% c("NAV", "PE Ratio (TTM)", "Yield", "Beta (5Y Monthly)", "Expense Ratio (net)"))

# A tibble: 5 × 2
  label               value 
  <chr>               <chr> 
1 NAV                 519.85
2 PE Ratio (TTM)      26.22 
3 Yield               1.37% 
4 Beta (5Y Monthly)   1.00  
5 Expense Ratio (net) 0.03% 

添加

.container
类会将您要查找的信息限制为位于图表下的“表格”,否则将从该页面提取带有
.svelte-tx3nkj
类标记的所有信息。

© www.soinside.com 2019 - 2024. All rights reserved.