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

使用rvest抓取纳斯达克IPO表格时Rstudio崩溃,如何获取对应数据框

问题原因
  • 目标页面的IPO表格为JavaScript动态渲染生成,rvest::read_html()仅能抓取未加载数据的初始静态页面,不存在目标表格节点
  • 页面内置的大量JS代码、反爬校验逻辑可能触发rvest依赖的libxml解析器异常,进而导致RStudio崩溃
解决方案

方案1:直接调用官方数据接口(最优,无解析崩溃问题)

直接请求纳斯达克后端IPO数据接口,返回结构化JSON数据,无需解析HTML,稳定性和速度都最优:

# 首次运行先安装依赖包
install.packages(c("httr2", "jsonlite", "dplyr"))
library(httr2)
library(jsonlite)
library(dplyr)

# 构造请求,模拟浏览器标识避免反爬拦截
req <- request("https://api.nasdaq.com/api/ipo/calendar") %>%
  req_headers(
    `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
    `Referer` = "https://www.nasdaq.com/"
  ) %>%
  req_url_query(date = format(Sys.Date(), "%Y-%m")) # 按YYYY-MM格式指定拉取月份,默认拉取当月数据

# 发送请求解析响应
resp <- req_perform(req)
raw_data <- resp_body_json(resp)

# 直接转化为标准DataFrame格式
upcoming_ipo <- bind_rows(raw_data$data$upcoming$upcomingTable$rows) # 待上市IPO表格
priced_ipo <- bind_rows(raw_data$data$priced$pricedTable$rows) # 已定价IPO表格

方案2:动态渲染页面后提取(适合需要模拟页面操作的场景)

如果需要和页面交互,可使用chromote包启动无头浏览器加载完整页面后再提取数据:

# 首次运行先安装依赖包
install.packages(c("chromote", "rvest", "dplyr"))
library(chromote)
library(rvest)
library(dplyr)

# 启动无头Chrome会话
b <- ChromoteSession$new()

# 访问目标页面,等待JS渲染完成
b$Page$navigate("https://www.nasdaq.com/market-activity/ipos")
Sys.sleep(3) # 可根据网络情况调整等待时长

# 获取渲染完成后的完整HTML
full_html <- b$Runtime$evaluate('document.documentElement.outerHTML')$result$value
web <- read_html(full_html)

# 提取两个表格
tables <- web %>%
  html_elements(".market-calendar-table__table") %>%
  html_table()

# 分别赋值为对应DataFrame
upcoming_ipo <- tables[[1]] # 第一个表格为待上市IPO
priced_ipo <- tables[[2]] # 第二个表格为已定价IPO

# 关闭浏览器会话释放资源
b$close()
注意事项
  • 调整请求频率,避免短时间内多次请求触发反爬限制
  • 接口请求可通过修改date参数的年月值,拉取历史月份的IPO数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:15:00