使用rvest爬取ASX网站基本面数据失败,求解决方法
解决ASX网站动态数据爬取问题
ASX网站的基本面数据是通过JavaScript动态渲染的,直接用read_html获取的是初始未加载完成的HTML源码,所以你找不到目标元素,返回空结果。下面给你两种可行的解决方案:
方案一:用RSelenium模拟浏览器渲染
RSelenium可以模拟真实浏览器加载页面,等待JS执行完成后再获取完整的页面内容,步骤如下:
- 先安装所需包:
install.packages("RSelenium") install.packages("rvest")
下载对应浏览器的驱动(比如ChromeDriver,需和你的Chrome版本匹配),确保驱动路径能被系统识别,或在代码中指定路径。
编写爬取代码:
library(RSelenium) library(rvest) # 启动Chrome浏览器驱动(替换chromever为你的Chrome版本号) driver <- rsDriver(browser = "chrome", chromever = "118.0.5993.70") remDr <- driver[["client"]] # 访问目标页面 remDr$navigate("https://www2.asx.com.au/markets/company/bhp") # 等待页面加载完成(可根据网络情况调整等待时间) Sys.sleep(5) # 获取渲染后的页面源码 page_source <- remDr$getPageSource()[[1]] ASX_bhp <- read_html(page_source) # 提取EPS数值(用你指定的选择器) eps_value <- ASX_bhp |> html_element("#company_key_statistics > div > div.panel-body.row > div:nth-child(3) > table > tbody > tr:nth-child(8) > td") |> html_text() print(eps_value) # 关闭浏览器及驱动 remDr$close() driver$server$stop()
方案二:直接调用ASX的API接口(更高效稳定)
ASX的动态数据实际是通过API接口返回的,直接请求接口能拿到结构化数据,无需处理页面渲染:
library(httr) library(jsonlite) # 请求BHP的关键统计数据API response <- GET("https://api-markets2.asx.com.au/asx/1/companies/BHP/keyStatistics") data <- fromJSON(content(response, "text")) # 提取EPS数据(查看返回的JSON结构,直接定位对应字段) eps <- data$equity$eps print(eps)
这种方法效率更高,也更不容易受页面结构变化影响,推荐优先使用。
内容的提问来源于stack exchange,提问作者Isaiah
相关产品推荐
相关产品推荐

