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

使用R语言rvest包爬取多页表格并合并为数据框的代码调整方法

R多页表格爬取调整方案

方案1:指定爬取页数

适用于明确知晓需要爬取的页面数量的场景,直接修改页码范围即可生效。

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

# 定义基础链接,页码位置用%s做占位符
base_url <- "https://www.worldathletics.org/records/toplists/sprints/100-metres/outdoor/women/senior/2021?page=%s"
# 指定要爬取的页码范围,示例为爬取前5页,可按需修改
page_range <- 1:5

# 批量爬取每个页面的表格
all_tables <- map(page_range, function(page_num) {
  current_url <- sprintf(base_url, page_num)
  WA_page <- read_html(current_url)
  WA_table <- WA_page  %>% 
    html_nodes("table.records-table") %>%
    html_table() %>% 
    .[[1]]
  # 设置1秒延迟,避免请求频率过高被网站限制
  Sys.sleep(1)
  return(WA_table)
})

# 合并所有页面表格为单个数据框
final_df <- bind_rows(all_tables)

如果不想额外安装purrr包,把map替换为base R的lapply即可,后续合并逻辑不变。

方案2:自动识别总页数爬取全部内容

适用于不清楚总页面数量的场景,会先读取第一页的分页栏获取总页数,再完成全量爬取。

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

base_url <- "https://www.worldathletics.org/records/toplists/sprints/100-metres/outdoor/women/senior/2021?page=%s"

# 读取第一页提取总页数
first_page <- read_html(sprintf(base_url, 1))
total_pages <- first_page %>% 
  # 选择分页栏非「下一页」的页码元素,若网站结构调整可自行修改选择器
  html_nodes(".pagination li:not(.next) a") %>% 
  html_text() %>% 
  as.integer() %>% 
  max(na.rm = TRUE)

# 批量爬取所有页面表格
all_tables <- map(1:total_pages, function(page_num) {
  current_url <- sprintf(base_url, page_num)
  WA_page <- read_html(current_url)
  WA_table <- WA_page  %>% 
    html_nodes("table.records-table") %>%
    html_table() %>% 
    .[[1]]
  Sys.sleep(1)
  return(WA_table)
})

final_df <- bind_rows(all_tables)

注意事项

  • 若运行时出现分页选择器报错,可通过浏览器F12审查分页元素的class属性,调整html_nodes中的匹配规则即可
  • 可根据自身网络情况调整Sys.sleep的等待时长,网络不稳定时建议适当延长,减少爬取失败概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:54:03