You need to enable JavaScript to run this app. R语言网页爬取创建data.frame报参数行数不一致错误的解决
优惠活动
大模型
产品
解决方案
定价
更多

R语言网页爬取创建data.frame报参数行数不一致错误的解决

报错核心原因

触发Error in data.frame arguments imply differing number of rows的本质是每个爬取字段的向量长度不一样,拼数据框时行数对不上,对应你代码里的具体问题:

  • 目标NHL数据全在id为example的表格里,但你除了rank字段,其余字段的选择器没有限定在这个表格范围内。直接写:nth-child(4)这种全局规则,会把整个网页上所有“是父元素第4个节点”的元素都抓下来,数量远大于表格实际行数。
  • 部分选择器逻辑完全错位:比如.text-left:nth-child(2)选的是“带text-left类的元素下面的第2个子节点”,不是你要的“表格里第2列的球员名字单元格”,抓到的根本不是目标数据。
  • 最终各个字段的向量长度从几个到几百个不等,拼数据框的时候自然会报错。
修复后可直接运行的代码
library(rvest)
link = "http://www.hockeycentral.co.uk/nhl/records/alltimegoal.php"
page = read_html(link)

# 先锁定表格里的所有有效数据行,排除表头
table_rows = page %>% 
  html_nodes("#example tbody tr")

# 逐行提取每个字段,保证所有字段长度和数据行数完全一致
rank = table_rows %>% 
  html_node("td:nth-child(1)") %>% 
  html_text(trim = TRUE)
player = table_rows %>% 
  html_node("td:nth-child(2)") %>% 
  html_text(trim = TRUE)
teams = table_rows %>% 
  html_node("td:nth-child(3)") %>% 
  html_text(trim = TRUE)
goals = table_rows %>% 
  html_node("td:nth-child(4)") %>% 
  html_text(trim = TRUE)
games = table_rows %>% 
  html_node("td:nth-child(5)") %>% 
  html_text(trim = TRUE)
assists = table_rows %>% 
  html_node("td:nth-child(6)") %>% 
  html_text(trim = TRUE)
points = table_rows %>% 
  html_node("td:nth-child(7)") %>% 
  html_text(trim = TRUE)
PPG = table_rows %>% 
  html_node("td:nth-child(8)") %>% 
  html_text(trim = TRUE)
SHG = table_rows %>% 
  html_node("td:nth-child(9)") %>% 
  html_text(trim = TRUE)

# 所有字段长度完全对齐,直接拼数据框即可
nhlcareer = data.frame(
  rank, player, teams, goals, games, assists, points, PPG, SHG,
  stringsAsFactors = FALSE
)
同类问题快速排查技巧

下次爬取再遇到类似行数不匹配的报错,直接打印每个字段的向量长度,就能快速定位哪个字段的选择器写错了:

# 输出每个字段的向量长度
c(
  length(rank), length(player), length(teams), length(goals),
  length(games), length(assists), length(points), length(PPG), length(SHG)
)

只有所有返回值完全相等时,才能正常拼成数据框;如果某一个字段的长度和其他值差很多,就把该字段的选择器范围缩小到目标表格的对应单元格里就行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 13:54:02