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

使用R的rvest包抓取手风琴格式网页表格失败求助

问题分析与解决方法

你的问题根源在于以下几点:

  • 绝对XPath极度脆弱:你使用的从根节点出发的绝对路径,只要页面结构有微小调整(比如新增/删除一个容器元素),路径就会直接失效。
  • tbody标签的误区:浏览器会自动为表格补全tbody标签,但网页原始HTML源码里可能并不存在这个标签,导致你的XPath因包含tbody而匹配不到任何元素。
  • 定位范围过窄:你直接定位到单个单元格,就算匹配成功也只能拿到孤立值,无法获取完整的“Monthly Cargo Volumes”表格数据。

修正后的代码

改用基于内容特征的稳定选择器,直接定位目标表格:

library(rvest)
library(dplyr)

url <- 'https://www.panynj.gov/port/en/our-port/facts-and-figures.html'

monthly_cargo <- url %>% 
  read_html() %>%  
  # 通过标题定位目标表格,避免依赖深层结构
  html_nodes(xpath = "//h3[contains(text(), 'Monthly Cargo Volumes')]/following-sibling::div//table") %>% 
  html_table(header = TRUE) %>% 
  .[[1]] %>% 
  as.data.frame()

# 查看数据前几行验证结果
head(monthly_cargo)

代码说明

  • 用//h3[contains(text(), 'Monthly Cargo Volumes')]精准定位表格标题,摆脱对页面层级结构的依赖
  • 用following-sibling::div//table找到标题紧邻的后续表格,确保抓取的是目标数据
  • 移除冗余的tbody引用,直接读取网页原始表格结构
  • header = TRUE自动将表格第一行设为列名,生成符合使用习惯的数据框

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:34:55