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

使用R语言抓取速卖通页面商品仅返回前10个的问题求助

问题原因与解决方案

速卖通商品列表采用懒加载机制:初始仅渲染前10个商品,剩余商品需要滚动页面触发后端加载。你用read_html直接获取的是页面初始静态HTML,自然只能拿到前10条数据。

解决方法:用RSelenium模拟浏览器加载全部内容

RSelenium可以模拟真实浏览器的行为,包括滚动页面触发懒加载,从而获取完整的商品列表。

步骤与代码示例

  1. 安装并加载依赖包:
install.packages(c("RSelenium", "rvest", "dplyr"))
library(RSelenium)
library(rvest)
library(dplyr)
  1. 启动Chrome浏览器驱动(需提前安装对应版本的chromedriver):
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver[["client"]]
  1. 打开目标页面并模拟滚动加载所有商品:
AlPage <- "https://www.aliexpress.com/w/wholesale-running-shoes.html?SearchText=running+shoes&catId=0&g=n&initiative_id=SB_20230318171033&sortType=total_tranpro_desc&spm=a2g0o.home.1000002.0&trafficChannel=main"
remDr$navigate(AlPage)

# 循环滚动直到所有商品加载完成
repeat {
  # 滚动到页面底部
  remDr$executeScript("window.scrollTo(0, document.body.scrollHeight);")
  # 等待2秒让新内容加载
  Sys.sleep(2)
  # 记录当前已加载的商品数量
  current_count <- length(remDr$findElements(using = "css selector", ".manhattan--title--24F0J-G, .cards--title--2rMisuY"))
  # 再次等待后检查数量,无变化则说明加载完成
  Sys.sleep(2)
  new_count <- length(remDr$findElements(using = "css selector", ".manhattan--title--24F0J-G, .cards--title--2rMisuY"))
  if(current_count == new_count) break
}
  1. 提取完整页面内容并解析商品名称:
# 获取加载完成后的页面HTML
page_source <- remDr$getPageSource()[[1]]
url <- read_html(page_source)

# 提取所有商品名称
alproduct_name <- html_nodes(url,".manhattan--title--24F0J-G, .cards--title--2rMisuY") %>% html_text2()
print(alproduct_name)
  1. 关闭浏览器驱动:
remDr$close()
driver$server$stop()

注意事项

  • 需确保浏览器驱动版本与本地浏览器版本匹配,否则无法正常启动。
  • 可根据网络速度调整等待时间,避免因加载不充分导致数据缺失。
  • 速卖通存在反爬机制,频繁操作可能触发限制,建议适当延长滚动间隔。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:47:28