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

如何用R(rvest)批量抓取CSI剧集维基页面的所有表格?

解决方法:循环遍历表格选择器并合并数据框

当然可以!其实你完全不用给每个表格选择器单独定义变量,把它们整理成一个字符向量,再结合purrr的循环函数,就能高效完成批量抓取并合并成单一DataFrame,具体代码和说明如下:

优化后的完整代码

library(rvest)
library(dplyr)
library(purrr)

# 目标URL
url <- "https://en.wikipedia.org/wiki/List_of_CSI:_Crime_Scene_Investigation_episodes"

# 把所有表格选择器整理成一个字符向量(包含你注释的第17季表格)
table_selectors <- c(
  '#mw-content-text > div > table:nth-child(14)',
  '#mw-content-text > div > table:nth-child(18)',
  '#mw-content-text > div > table:nth-child(22)',
  '#mw-content-text > div > table:nth-child(26)',
  '#mw-content-text > div > table:nth-child(30)',
  '#mw-content-text > div > table:nth-child(34)',
  '#mw-content-text > div > table:nth-child(38)',
  '#mw-content-text > div > table:nth-child(42)',
  '#mw-content-text > div > table:nth-child(46)',
  '#mw-content-text > div > table:nth-child(50)',
  '#mw-content-text > div > table:nth-child(54)',
  '#mw-content-text > div > table:nth-child(58)',
  '#mw-content-text > div > table:nth-child(62)',
  '#mw-content-text > div > table:nth-child(66)',
  '#mw-content-text > div > table:nth-child(70)',
  '#mw-content-text > div > table:nth-child(74)',
  '#mw-content-text > div > table:nth-child(79)'
)

# 遍历所有选择器,抓取每个表格并合并
episodes <- table_selectors %>%
  map(function(selector) {
    url %>% read_html() %>% html_nodes(selector) %>% html_table(fill = TRUE) %>% pluck(1)
  }) %>%
  bind_rows()

# 写入CSV文件(注意你之前代码里的`population`是笔误,应该用`episodes`)
write.csv(episodes, file = "csi_episodes.csv", row.names = FALSE)

关键说明

  • 把所有选择器放进向量table_selectors,比单独定义变量简洁太多,也方便后续修改或增减
  • 使用map()函数遍历每个选择器,逐个抓取表格:pluck(1)是把html_table()返回的列表提取成单个数据框
  • bind_rows()会自动对齐列名,把所有表格纵向合并成一个大的DataFrame,完美解决多表格合并需求
  • 修正了你原代码里的小错误:write.csv里的population应该是episodes,否则会报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:10:39