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

R语言rvest爬取Cricinfo运动员信息时分类与值长度不匹配问题求解

R语言爬取Cricinfo运动员信息长度不匹配问题解决方案

问题根因

现有代码直接全局提取所有分类标题和描述文本,没有绑定每个分类和其下属的描述项,当某分类存在多个描述值时,两个向量的长度就会不匹配,无法构建数据框。正确的处理逻辑是先定位每个分类的独立父容器,再逐个处理每个容器内的标题和描述,保证配对关系准确。

方案1:单分类仅提取第一个值

如果不需要多值数据,每个分类只保留第一个结果,适配原代码的输出结构,代码如下:

library(rvest)
library(dplyr)

# 定位每个分类的独立父容器
parent_nodes <- content %>% 
  html_nodes(".player_overview-grid div")

# 逐个提取每个容器的分类名和第一个对应值
player_data <- lapply(parent_nodes, function(node){
  cat <- node %>% html_node(".player-card-heading") %>% html_text(trim = T)
  val <- node %>% html_node(".player-card-description.gray-900") %>% html_text(trim = T)
  data.frame(player_cats = cat, player_info = val, stringsAsFactors = F)
}) %>% bind_rows()

该方案输出的分类和值数量完全对等,不会出现长度不一致问题。

方案2:保留所有值,重复对应分类标题

如果需要全量保存多值数据,比如示例中Shaun Marsh的两个亲属信息都要留存,代码如下:

library(rvest)
library(dplyr)

parent_nodes <- content %>% 
  html_nodes(".player_overview-grid div")

player_data <- lapply(parent_nodes, function(node){
  cat <- node %>% html_node(".player-card-heading") %>% html_text(trim = T)
  vals <- node %>% html_nodes(".player-card-description.gray-900") %>% html_text(trim = T)
  # 分类标题重复对应多个值
  data.frame(player_cats = rep(cat, length(vals)), player_info = vals, stringsAsFactors = F)
}) %>% bind_rows()

该方案下如果某分类有N个值,分类标题就会重复N次,两个向量长度完全匹配,可直接执行后续批量rbind合并操作。

批量爬取提示

批量爬取时建议在两次请求之间加Sys.sleep(1~2)的停顿,避免触发网站反爬机制,同时可添加tryCatch逻辑捕获异常页面,避免爬取过程中途中断。

内容的提问来源于stack exchange,提问作者Stuck at one

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:45:03