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

使用rvest爬取Kimovil三星手机列表仅返回40条,如何获取全部51条数据?

问题根因

你爬取的站点手机列表采用了懒加载逻辑,首次请求返回的HTML里仅渲染了前40条数据,剩余11条需要页面滚动到接近底部时才会触发加载、渲染到DOM结构中,因此用rvest直接拉取初始静态HTML只能拿到40条结果。

可行解决方案

方案1:使用RSelenium模拟浏览器操作(无需分析接口)

通过模拟真实浏览器的滚动行为,等待所有数据加载完成后再提取内容,参考代码如下:

# 提前安装对应依赖:install.packages(c("RSelenium", "rvest"))
library(RSelenium)
library(rvest)

# 启动Chrome驱动,注意chromever要和你本地安装的Chrome版本一致
driver <- rsDriver(browser = "chrome", chromever = "你的Chrome版本号")
remDr <- driver$client

# 访问目标页面
remDr$navigate("https://www.kimovil.com/en/compare-smartphones/f_min_dm+unveileddate.3,i_b+slug.samsung")

# 重复滚动到底部2-3次,确保所有懒加载数据都渲染完成
for (i in 1:3) {
  remDr$executeScript("window.scrollTo(0, document.body.scrollHeight);")
  Sys.sleep(2) # 等待数据加载
}

# 拉取完整页面HTML
full_page <- read_html(remDr$getPageSource()[[1]])

# 提取设备名称
device_label <- html_text(html_nodes(full_page, 'div.device-name'))

# 校验数据量
print(length(device_label)) # 此时应为51

# 关闭浏览器驱动
remDr$close()
driver$server$stop()

方案2:直接抓取数据接口(效率更高)

你可以通过浏览器开发者工具的网络面板,筛选XHR请求,滚动页面时找到加载后续数据的接口,直接调用该接口即可拿到结构化的全量数据,不需要解析HTML,运行效率远高于模拟浏览器方案。
操作流程:

  • 打开目标页面后按F12调出开发者工具,切换到「网络」标签,筛选「Fetch/XHR」类型的请求
  • 滚动页面到接近底部,找到触发的加载数据请求,复制请求地址和必要的请求头
  • 用httr包发送对应请求,解析返回的JSON数据即可获取全量51条手机信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:57:02