求助:使用R的rvest包爬取瑞士Galaxus网站商品价格失败
解决Galaxus商品价格爬取问题
我之前也碰到过类似的情况——电商网站很多核心内容(比如价格)是通过JavaScript动态渲染的,rvest的read_html()只能抓取页面的静态HTML源码,所以你找不到那个priceEnergyWrapper--2ZNIJ元素很正常,因为它是页面加载后才生成的。下面给你两种可行的解决方案:
方法一:直接调用网站API(推荐,更高效)
Galaxus这类电商网站通常会通过API接口获取商品数据,我们可以直接抓这个接口的返回值,比模拟浏览器简单得多:
- 打开Chrome开发者工具(F12),切换到Network标签页
- 刷新商品页面,在搜索框输入
price或者product,筛选出XHR/fetch类型的请求 - 找到返回商品详情的API(比如类似
https://www.galaxus.ch/api/products/10246344这样的链接) - 用
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模拟真实浏览器的行为,等待页面完全加载后再提取元素:
- 先安装RSelenium和相关依赖(需要ChromeDriver或者GeckoDriver)
- 启动浏览器会话,访问目标页面
- 等待价格元素加载完成,再用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
相关产品推荐
相关产品推荐

