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

R语言rvest爬虫抓取Ripley电商商品价格与网页显示不符求助

问题原因

  1. 核心错位问题:你当前的代码是先提取整个页面所有商品的原价、促销价、银行卡价三类节点,再统一拼接成数据框。但如果页面中部分商品没有某类价格(比如你举例的海信电视没有银行卡专属价),三类价格的向量长度就会不一致,R在拼接tibble时会自动循环补全短向量,直接导致价格和商品错位,这是你拿到的价格和实际不符的最主要原因。
  2. 请求标识问题:rvest的read_html默认请求头会被网站识别为爬虫,部分促销活动价格仅对正常浏览器访客返回,爬虫请求会拿到无折扣的基准价格,也会导致结果偏差。
  3. 未做格式校验:提取的文本可能包含空格、换行符等不可见字符,也会干扰结果匹配。

解决方法

修改抓取逻辑,先定位每个商品的父容器节点,再从单个商品节点内提取对应价格,保证每个商品的三个价格字段一一对应,同时添加请求头模拟浏览器访问。

修改后的代码如下:

library(rvest)
library(purrr)
library(tidyverse)
library(httr)

# 模拟Chrome浏览器请求头,可替换为你自己浏览器的User-Agent
headers <- c(
  "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
)

urls <- list("https://simple.ripley.com.pe/tecnologia/tv-y-cine-en-casa/televisores?page=1",
             "https://simple.ripley.com.pe/tecnologia/tv-y-cine-en-casa/televisores?page=2")

# 带请求头抓取页面
h <- urls %>% map(~{
  read_html(.x, add_headers(.headers=headers))
})

m <- h %>% map_df(~{
  # 先提取每个商品的父节点
  product_nodes <- html_nodes(.x, '.catalog-product-item')
  
  # 遍历每个商品节点单独提取信息,避免错位
  map_df(product_nodes, ~{
    producto <- html_node(.x, ".catalog-product-details__name") %>% html_text(trim = T)
    precio.antes <- html_node(.x, '.catalog-prices__list-price') %>% html_text(trim = T)
    precio.actual <- html_node(.x, '.catalog-prices__offer-price') %>% html_text(trim = T)
    precio.tarjeta <- html_node(.x, '.catalog-prices__card-price') %>% html_text(trim = T)
    
    tibble(
      periodo = lubridate::year(Sys.Date()),
      fecha = Sys.Date(),
      ecommerce = "ripley",
      producto = ifelse(length(producto)==0, NA, producto),
      precio.antes = ifelse(length(precio.antes)==0, NA, precio.antes),
      precio.actual = ifelse(length(precio.actual)==0, NA, precio.actual),
      precio.tarjeta = ifelse(length(precio.tarjeta)==0, NA, precio.tarjeta)
    )
  })
})

补充说明

如果修改后仍有偏差,可以在抓取页面后先把html源码保存到本地,和你浏览器看到的页面源码做对比,确认是否是网站给爬虫返回了不同的内容。如果是动态渲染的情况,可以换用RSelenium模拟浏览器操作后再提取内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:48:05