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

使用R抓取网页嵌入表格报subscript out of bounds错误如何解决

问题根因

两次爬取失败的核心原因:目标页Performance Characteristics板块的内容是页面初始加载完成后,由JavaScript异步拉取数据渲染生成的,并非嵌在首次返回的静态HTML源码中。rvest::read_html()仅能获取首次请求返回的静态源码,不会执行页面JS逻辑,因此不管怎么调整XPath路径,都匹配不到动态生成的节点,自然拿不到目标数据。

实现方法

不用上RSelenium、Playwright这类重的浏览器模拟方案,直接抓页面调用的异步数据接口效率更高、稳定性更好:

  • 打开浏览器开发者工具,切换到「网络」面板,筛选Fetch/XHR请求后刷新页面,就能找到对应产品基本面数据的接口,接口直接返回结构化JSON数据,省去解析HTML的步骤。
  • 构造请求调用接口,直接提取目标字段即可,可复现代码如下:
library(httr)
library(jsonlite)
library(glue)

# 从目标url提取产品ID,构造数据接口地址
product_id <- "251795"
api_endpoint <- glue("https://www.ishares.com/uk/individual/en/products/{product_id}/fund/1506575576011.ajax?tab=performance")

# 携带常规浏览器请求头,避免被反爬拦截
response <- GET(
  api_endpoint,
  add_headers(
    `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
  )
)

# 解析返回的JSON格式数据
fund_perf_data <- fromJSON(content(response, as = "text"))

# 提取目标字段:12个月滚动收益率
trailing_yield_12m <- fund_perf_data$performanceData$trailingYield12m
print(trailing_yield_12m)

运行上述代码即可直接拿到目标值3.43%。如果后续接口路径有微调,只需要在开发者工具的网络面板里找到最新的接口地址替换即可,这类官方数据接口的字段结构很少变动,比解析HTML节点的方案鲁棒性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:40:50