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

如何用R的rvest爬取{{variable}}容器及解决占位符、分页重复问题

问题原因分析

1. precio.tarjeta字段返回占位符的原因

precio.tarjeta对应的卡片专属价格没有在服务端渲染阶段写入静态HTML,你在源码里看到的{{price}}是前端Vue/React这类框架的模板占位符,需要等页面加载完成后,浏览器执行JavaScript脚本请求后端价格接口,再把实际数值替换到对应DOM节点上。
rvest的read_html仅能获取初始静态HTML内容,不会执行页面JS,也不会发起后续异步数据请求,因此只能拿到未替换的占位符。其余价格字段是服务端直接渲染到HTML里的,所以可以正常抓取。

2. 分页商品重复的原因

你构造的URL分页参数未生效,常见原因有两个:

  • 站点分页逻辑除page参数外,还依赖Cookie、请求头标识或其他隐藏参数,仅修改URL中的page值无法触发分页返回
  • 你的请求未携带浏览器特征请求头,被站点反爬策略识别,所有请求统一返回第一页内容
解决方法

针对占位符问题

可选两种方案:

  • 方案1:使用支持JS渲染的工具,比如RSelenium、webdriver等无头浏览器工具,模拟浏览器完整加载页面后再提取节点内容,可直接兼容你现有的节点提取逻辑
  • 方案2:直接抓取后端数据接口。打开浏览器F12控制台切换到「网络」标签,筛选XHR/fetch类型的请求,找到返回商品价格数据的接口,直接构造HTTP请求调用接口拿数据,该方案效率远高于页面爬取,也无需处理渲染问题

针对分页重复问题

按优先级执行以下操作:

  1. 给请求添加标准浏览器请求头,同时增加请求间隔避免触发频率限制,示例修改代码:
h <- urls %>% map(~{
  Sys.sleep(runif(1,1,3)) # 1-3秒随机延迟
  read_html(.x, httr::add_headers(
    `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
  ))
})
  1. 在浏览器F12网络控制台中,点击第二页查看实际发送的请求URL,核对参数和你构造的URL差异,补全缺失的分页参数
  2. 爬取完成后可添加去重逻辑兜底:
df <- df %>% dplyr::distinct(marca, producto, .keep_all = TRUE)

内容的提问来源于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 00:57:04