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

如何解决「Tibble columns must have compatible sizes」报错?

解决Tibble列尺寸不兼容的爬虫错误

这个错误的核心是抓取的作者信息数量和其他字段(标题、日期、URL)数量不匹配——你当前的代码全局抓取了21个作者元素,但其他字段只抓到20个,而tibble要求每一列的行数必须完全一致,因此抛出了尺寸兼容错误。

解决方案

问题出在选择器的范围上,你之前是全局抓取所有作者元素,而不是针对每篇文章的容器单独抓取。修改思路是:先定位每篇文章的父容器,再从每个容器内提取对应字段,确保每篇文章的所有信息一一对应。

修改后的完整代码:

library(rvest)
library(tidyverse)

get_articles <- function(n_articles) {
  page <- paste0("https://www.theroot.com/news/criminal-justice",
                 "?startIndex=",
                 n_articles) %>%
    read_html()
  
  # 先抓取所有文章的容器节点
  articles <- page %>% html_elements(".aoiLP")
  
  # 对每个容器节点单独提取信息,保证列数一致
  map_dfr(articles, function(article) {
    tibble(
      title = article %>% html_element(".js_link") %>% html_text2(),
      author = article %>% html_element(".llHfhX .js_link, .permalink-bylineprop") %>% html_text2(),
      date = article %>% html_element(".js_meta-time") %>% html_text2(),
      url = article %>% html_element(".js_link") %>% html_attr("href")
    )
  })
}

df <- map_dfr(seq(0, 200, by = 20), get_articles)

关键修改点

  • 先定位每篇文章的父容器.aoiLP,确保后续操作都围绕单篇文章展开
  • 使用map_dfr遍历每个文章容器,对单个容器提取信息,避免全局匹配导致的数量偏差
  • 将html_elements(复数,匹配多个元素)改为html_element(单数,匹配单个元素),保证每个容器只提取对应字段的一个值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:10:26