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

使用rvest无法抓取Amazon商品价格的问题求助

解决方案:无法抓取Amazon价格标签的问题

可能原因分析

你遇到的情况大概率是Amazon更新了页面结构或加强了反爬机制——电商平台的反爬策略会频繁调整,而.a-offscreen这类价格标签属于重点保护对象。

可行解决步骤

1. 先确认页面实际返回内容

首先排查返回的HTML里是否真的包含目标标签:

# 打印返回页面的前2000字符,快速检查是否有价格相关信息
page_text <- my_session %>% html_text()
cat(substr(page_text, 1, 2000))

如果返回内容完全没有价格,说明Amazon已识别爬虫并返回了限制页面;如果有价格但标签结构变更,就需要重新定位选择器。

2. 强化请求头模拟真实浏览器

仅设置User-Agent可能不够,补充更多请求头字段:

library(rvest)

my_url <- "https://www.amazon.com/s?k=reusable+straws"
# 构造更贴近真实浏览器的请求头
headers <- add_headers(
  `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120",
  `Accept` = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  `Accept-Language` = "en-US,en;q=0.5",
  `Referer` = "https://www.amazon.com/",
  `DNT` = "1"
)

my_session <- session(my_url, headers)
# 先抓取价格的父容器,再定位内部的价格标签
prices <- my_session %>% 
  html_elements(".a-price") %>% 
  html_element(".a-offscreen") %>% 
  html_text()
print(prices)

3. 应对动态渲染的情况

如果Amazon用JavaScript动态加载价格,rvest无法解析JS,这时候需要用浏览器自动化工具,比如RSelenium:

library(RSelenium)

# 启动Firefox浏览器(需提前配置好GeckoDriver)
driver <- rsDriver(browser = "firefox", port = 4567L)
remDr <- driver[["client"]]

remDr$navigate(my_url)
Sys.sleep(3) # 等待页面完全加载
# 抓取价格标签文本
price_elements <- remDr$findElements(using = "css selector", value = ".a-offscreen")
prices_text <- sapply(price_elements, function(x) x$getElementText()[[1]])
print(prices_text)

# 关闭浏览器和服务
remDr$close()
driver$server$stop()

4. 基础反爬规避补充

  • 每次请求后添加随机延迟:Sys.sleep(runif(1, 2, 5)),避免请求过于频繁触发限制
  • 如果IP被限制,可通过httr::use_proxy()配置代理IP更换请求来源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:43:11