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

从Avanza网站网页抓取股票名称失败的技术求助

问题原因

Avanza的股票列表页面是Angular构建的单页应用,页面内容靠JavaScript动态渲染。read_html()只能抓取页面的静态初始代码,拿不到JS加载后的股票数据,所以你之前不管怎么定位span标签,要么报错要么返回空列表。

解决方案

方法1:直接调用后端API(推荐)

打开浏览器开发者工具的「网络」面板,能找到页面获取股票数据的API接口,直接请求这个接口就能拿到结构化数据,比模拟浏览器高效得多。

示例代码:

library(httr)
library(jsonlite)

# 对应原页面参数的API地址
api_url <- "https://www.avanza.se/_api/search/stock?sortField=numberOfOwners&sortOrder=DESC&limit=1000&sectorIds=17&countryCodes=SE"

# 发送请求并解析JSON数据
response <- GET(api_url)
data <- fromJSON(content(response, "text"))

# 提取股票名称
stock_names <- data$hits$name

# 查看前几个结果
head(stock_names)

用这个方法不仅能拿到名称,还能获取股票代码、市值等其他字段,实用性更强。

方法2:用RSelenium模拟浏览器加载内容

如果不想找API,就用RSelenium启动真实浏览器,等页面完全渲染后再抓取内容。

示例代码:

library(RSelenium)
library(rvest)

# 启动Chrome浏览器(需提前安装Chrome和对应版本的ChromeDriver)
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver[["client"]]

# 打开目标页面
remDr$navigate("https://www.avanza.se/aktier/hitta.html?sectorId=17&s=numberOfOwners.desc&o=1000&sectorName=Bioteknik%20%26%20L%C3%A4kemedel&cc=SE")

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

# 获取渲染后的页面HTML并解析
page_source <- remDr$getPageSource()[[1]]
page <- read_html(page_source)

# 定位股票名称节点(渲染后的页面里,名称通常在class为'ellipsis'的span中)
stock_names <- page %>% html_nodes("span.ellipsis") %>% html_text()

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

# 查看结果
head(stock_names)

注意:使用前要确保ChromeDriver版本和你的Chrome浏览器版本匹配,不然会启动失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:33:35