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

使用rvest批量爬取网页报错:arguments imply differing number of rows

解决rvest爬取SAGE期刊时的行数不匹配错误

你遇到的这个报错Error in data.frame(...) : arguments imply differing number of rows: 1, 6, 65,核心原因很明确:你提取的三个字段行数完全不匹配!

咱们拆解下选择器对应的内容:

  • .journalNavTitle是当期期刊的整体标题(比如卷号+期号),每个页面只有1个;
  • .hlFld-Title是单篇文章的标题,每个页面有N个(比如你这里的6或65);
  • .entryAuthor是对应文章的作者,数量和标题保持一致。

直接把这三个字段塞进data.frame时,R会因为列的行数不统一而抛出错误。

修改后的代码方案

我们只需要把单个的IssueID重复对应到每一篇文章的行上,让所有列的行数保持一致就行,这里用rep()函数实现重复逻辑:

library(xml2)
library(rvest)
library(purrr)

# 注意你原来的变量名打错了,是url不是ulr哦
url_base <- "https://journals.sagepub.com/toc/jina/33/%d"

map_df(1:4, function(i){
  page <- read_html(sprintf(url_base, i))
  
  # 分别提取三个字段,先拿到各自的内容
  issue_id <- html_text(html_nodes(page, ".journalNavTitle"))
  headings <- html_text(html_nodes(page, ".hlFld-Title"))
  authors <- html_text(html_nodes(page, ".entryAuthor"))
  
  # 把单个IssueID重复,次数等于文章数量,确保列行数一致
  data.frame(
    IssueID = rep(issue_id, length(headings)),
    Heading = headings,
    Author = authors,
    stringsAsFactors = FALSE  # 建议加上,避免字符型数据自动转成因子
  )
}) -> SageJournals

额外优化建议

  1. 修正了你原来的变量名错误(ulr_base→url_base),避免后续出现找不到变量的问题;
  2. 加入stringsAsFactors = FALSE可以防止字符型数据被自动转成因子,后续数据处理更灵活;
  3. 如果担心某个页面没有文章(即headings长度为0),可以加个判断跳过空页面:
    if(length(headings) == 0) return(NULL)
    

这样修改后,每篇文章都会对应到当期的IssueID,所有列的行数完全匹配,就不会再报错啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:14:35