请求帮助:修复从Yahoo Finance爬取ETF统计数据的R代码
解决方案:适配Yahoo Finance新页面结构的ETF数据爬取
问题根源
Yahoo Finance页面结构已更新,目标统计数据不再以标准HTML表格形式存在,而是通过带data-test属性的span元素存储,原代码依赖的html_table()方法自然失效。
实现代码
用rvest结合CSS选择器精准定位目标字段,代码如下:
library(rvest) library(tibble) ticker <- "IVV" url <- paste0("https://finance.yahoo.com/quote/", ticker) # 读取页面 page <- read_html(url) # 封装字段提取逻辑 extract_field <- function(page, test_attr) { page %>% html_element(css = paste0('span[data-test="', test_attr, '"]')) %>% html_text() } # 提取目标字段 nav <- extract_field(page, "NAV-value") pe_ratio <- extract_field(page, "PE-RATIO-value") yield <- extract_field(page, "YIELD-value") beta <- extract_field(page, "BETA-value") expense_ratio <- extract_field(page, "EXPENSE_RATIO-value") # 整理为结构化数据 result <- tibble( Ticker = ticker, NAV = nav, PE_Ratio_TTM = pe_ratio, Yield = yield, Beta = beta, Expense_Ratio = expense_ratio ) print(result)
关键说明
- 每个目标字段对应唯一的
data-test属性值,这是当前页面定位元素的可靠标识:- NAV →
NAV-value - PE Ratio TTM →
PE-RATIO-value - Yield →
YIELD-value - Beta →
BETA-value - Expense Ratio →
EXPENSE_RATIO-value
- NAV →
- 若后续页面再次调整,需重新检查浏览器开发者工具中对应字段的
data-test属性值,更新选择器即可。 - 频繁爬取可能触发反爬限制,建议添加
Sys.sleep(2)这类延迟操作。
内容的提问来源于stack exchange,提问作者Brad Horn
相关产品推荐
相关产品推荐

