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

求助:使用R的rvest包爬取瑞士Galaxus网站商品价格失败

解决Galaxus商品价格爬取问题

我之前也碰到过类似的情况——电商网站很多核心内容(比如价格)是通过JavaScript动态渲染的,rvest的read_html()只能抓取页面的静态HTML源码,所以你找不到那个priceEnergyWrapper--2ZNIJ元素很正常,因为它是页面加载后才生成的。下面给你两种可行的解决方案:

方法一:直接调用网站API(推荐,更高效)

Galaxus这类电商网站通常会通过API接口获取商品数据,我们可以直接抓这个接口的返回值,比模拟浏览器简单得多:

  1. 打开Chrome开发者工具(F12),切换到Network标签页
  2. 刷新商品页面,在搜索框输入price或者product,筛选出XHR/fetch类型的请求
  3. 找到返回商品详情的API(比如类似https://www.galaxus.ch/api/products/10246344这样的链接)
  4. 用httr包请求这个API,解析JSON数据提取价格

示例代码:

library(httr)
library(jsonlite)

# 替换成你找到的API链接
api_url <- "https://www.galaxus.ch/api/products/10246344"
response <- GET(api_url)
product_data <- fromJSON(content(response, "text"))

# 提取价格(根据实际JSON结构调整,比如可能在product$price$current这样的路径)
price <- product_data$price$current
cat("商品价格:", price, "\n")

方法二:用RSelenium模拟浏览器加载动态内容

如果找不到API,就用RSelenium模拟真实浏览器的行为,等待页面完全加载后再提取元素:

  1. 先安装RSelenium和相关依赖(需要ChromeDriver或者GeckoDriver)
  2. 启动浏览器会话,访问目标页面
  3. 等待价格元素加载完成,再用CSS选择器提取

示例代码:

library(RSelenium)

# 启动Chrome浏览器(确保ChromeDriver已配置好)
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver[["client"]]

# 访问商品页面
remDr$navigate("https://www.galaxus.ch/fr/s8/product/quiksilver-everyday-stretch-l-shorts-de-bain-10246344")

# 等待页面加载(可以根据实际情况调整等待时间)
Sys.sleep(3)

# 提取价格元素(这里用你找到的类名,注意可能需要调整选择器)
price_element <- remDr$findElement(using = "css selector", value = ".priceEnergyWrapper--2ZNIJ")
price <- price_element$getElementText()[[1]]

cat("商品价格:", price, "\n")

# 关闭浏览器会话
remDr$close()
driver$server$stop()

提示:用SelectorGadget的时候,要确保页面完全加载完毕再选择元素,不然可能选到还没渲染出来的内容。另外,网站的类名可能会随时变化,要注意定期检查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:07:11