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

使用rvest与splashr爬取网页表格报错,应如何解决

问题排查与解决方法

两个方案失败原因

  • 第一种rvest方案:目标页面的表格存在合并单元格属性,且你未指定精准的表格选择器,html_nodes("table")会提取页面所有表格,其中包含无内容的空table节点,html_table()默认参数无法处理不规范表格结构与空节点,返回NULL触发报错。
  • 第二种splashr方案:splashr依赖Docker运行Splash服务,你的环境未安装Python的docker模块、也没有启动Docker服务,start_splash()执行失败,后续访问本地8050端口连接被拒,所有依赖前序步骤的对象都未生成,触发连锁报错。

可行修复方案

方案1:修正rvest代码直接爬取(该页面表格为静态渲染,无需动态加载工具)

library(rvest)
library(dplyr)

# 读取页面源码
page <- read_html("https://www.sac-isc.gc.ca/eng/1620925418298/1620925434679")
# 精准定位目标表格+适配不规则结构
loadedTable <- page %>% 
  # 用类选择器精准定位目标表格,避免选中无效空表格
  html_element("table.wb-tables") %>% 
  # 开启fill参数填充合并单元格,明确识别表头
  html_table(header = TRUE, fill = TRUE, trim = TRUE) %>% 
  as_tibble()

# 输出前几行验证结果
head(loadedTable)

核心修改点:一是用精准的类选择器定位目标表格,避免提取无效空节点;二是给html_table()传入fill=TRUE参数,自动适配有合并单元格的表格结构,避免返回NULL。

方案2:若需使用Splash,先解决依赖问题

  • 先安装Docker桌面端并启动Docker后台服务
  • 安装Python docker模块:终端执行pip install docker
  • 运行splashr代码时,在start_splash()后添加3-5秒延迟,等待Splash服务完全启动后再调用渲染接口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 03:06:03