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

使用Rselenium滚动全页提取宝可梦卡牌表格为数据框的问题

问题核心原因
  • 滚动对象错误:该站点的懒加载触发依赖全局页面滚动,你向表格元素发送end按键无法触发加载逻辑
  • 无等待时间:滚动后异步数据请求、DOM渲染需要时间,立即拉取页面源码只能拿到滚动前的旧内容
  • 单次滚动不充分:数据量较大时一次滚动无法触发全部内容加载,需要循环滚动直到无新内容产生
修正后的完整实现方案

你原本的技术结合思路是完全正确的:RSelenium负责处理页面交互、触发懒加载拿到完整DOM结构,rvest负责高效解析提取数据,只需要修正交互逻辑即可正常运行,完整代码如下:

library(RSelenium)
library(rvest)
library(tidyverse)

# 启动驱动
rD <- rsDriver(browser="firefox", port=4545L, verbose=F)
remDr <- rD[["client"]]
# 全局隐性等待设置,避免元素未加载完成导致的报错
remDr$setImplicitWaitTimeout(10000)

# 访问初始分类页,抓取所有卡牌系列的链接
remDr$navigate("https://www.pricecharting.com/category/pokemon-cards")
Sys.sleep(2)
# 提取所有系列的文本标识,可自行过滤不需要抓取的系列
series_list <- remDr$findElements(using = "css", "#category-page li a") %>% 
  map_chr(~.$getElementText()[[1]])

all_data <- list()
# 遍历所有系列抓取,示例仅保留Promo系列,要全量抓取删除[grepl("Promo", series_list)]过滤条件即可
for(series in series_list[grepl("Promo", series_list)]){
  # 点击进入对应系列页面
  remDr$findElement(using = "link text", series)$clickElement()
  Sys.sleep(3)
  
  # 循环滚动直到表格不再新增内容
  last_row_num <- 0
  while(TRUE){
    # 执行JS直接滚动到页面最底部,触发懒加载
    remDr$executeScript("window.scrollTo(0, document.body.scrollHeight);")
    Sys.sleep(2) # 等待数据请求和DOM渲染完成
    
    # 统计当前表格实际行数
    current_row_num <- remDr$findElements(using = "css", "#games_table tbody tr") %>% length()
    # 行数无变化说明已经加载完全部内容,跳出循环
    if(current_row_num == last_row_num){
      break
    }
    last_row_num <- current_row_num
  }
  
  # 拉取完整页面源码用rvest解析提取
  full_page <- read_html(remDr$getPageSource()[[1]])
  series_table <- full_page %>% 
    html_element("#games_table") %>% 
    html_table() %>% 
    mutate(series = series) # 新增列标记数据所属卡牌系列,方便后续合并分析
  
  all_data[[series]] <- series_table
  # 返回分类页,准备抓取下一个系列
  remDr$goBack()
  Sys.sleep(2)
}

# 合并所有系列的抓取结果
final_data <- bind_rows(all_data)

# 关闭驱动释放资源
remDr$close()
rD$server$stop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:51:00