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

如何使用R从动态URL提取信息?解决rvest提取失败问题

问题原因

Yahoo财经的财报日历页面是JavaScript动态渲染的。read_html()只能获取服务器返回的初始静态HTML,而你在浏览器检查元素中看到的内容是浏览器执行JS后生成的DOM结构,两者不一致,所以直接爬取实时URL时找不到目标元素。


解决方案

方案1:用RSelenium模拟浏览器渲染页面

RSelenium可以模拟真实浏览器加载页面,等待JS执行完成后再获取完整的DOM内容,这样就能正常提取数据。

library(RSelenium)
library(rvest)
library(tidyverse)

# 启动Chrome浏览器驱动(需提前安装对应版本的ChromeDriver)
driver <- rsDriver(browser = "chrome", chromever = "匹配你的Chrome版本号")
remDr <- driver[["client"]]

# 访问目标页面
url_live <- "https://finance.yahoo.com/calendar/earnings?from=2023-07-30&to=2023-08-05&day=2023-08-03"
remDr$navigate(url_live)

# 等待页面加载完成(根据网络情况调整等待时间)
Sys.sleep(3)

# 获取渲染后的完整HTML
page_source <- remDr$getPageSource()[[1]]
webpage <- read_html(page_source)

# 提取目标数值
value <- webpage %>%
  html_node(xpath = '//span[contains(@class, "Mstart") and contains(@class, "Fw") and contains(@class, "Fz")]/span') %>%
  html_text()

numeric_value <- as.numeric(str_extract(value, "\\d+(?= results)"))
print(numeric_value)

# 关闭浏览器和驱动
remDr$close()
driver$server$stop()

方案2:直接请求后端API接口(更高效)

动态页面通常会通过AJAX请求后端API获取数据,你可以在浏览器开发者工具的「Network」标签中找到对应接口,直接请求接口获取数据,无需渲染页面。

library(httr)
library(jsonlite)
library(tidyverse)

# 替换为从浏览器中获取的有效API链接(需包含合法的crumb和Cookie参数)
api_url <- "https://query1.finance.yahoo.com/v7/finance/calendar/earnings?formatted=true&crumb=你的crumb值&day=2023-08-03&from=2023-07-30&to=2023-08-05&lang=en-US&region=US&corsDomain=finance.yahoo.com"

# 发送请求,需携带浏览器的User-Agent和Cookie
response <- GET(api_url, add_headers(
  "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
  "Cookie" = "你的浏览器Cookie内容"
))

# 解析JSON数据,直接获取总结果数
data <- fromJSON(content(response, "text"))
total_results <- data$calendar$earnings$meta$total
print(total_results)

注意:Yahoo会验证crumb和Cookie参数,需要从浏览器访问页面时实时获取,且参数可能定期失效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:22:21