如何用R批量抓取1至50号序列URL中的表格?
批量抓取多URL表格的实现方法
核心思路
先生成1到50的完整URL列表,再用批量处理工具循环抓取每个页面的目标表格,最后合并成一个统一的数据框。用R的purrr包处理这类批量任务比传统for循环更高效简洁,还能自动完成数据合并。
完整实现代码
library(tidyverse) library(rvest) # 1. 生成目标URL列表 base_url <- "https://uboat.net/allies/commanders/" urls <- paste0(base_url, 1:50, ".html") # 2. 定义单个URL的抓取函数(包含异常处理) scrape_table <- function(url) { # 捕获加载失败或无表格的情况,避免中断整个批量流程 tryCatch({ read_html(url) %>% html_element('table.table_subtle') %>% html_table() %>% # 可选:添加来源URL列,方便后续数据溯源 mutate(source_url = url) }, error = function(e) { # 出错时返回空数据框,保证批量任务继续执行 message(paste("抓取失败:", url, "错误信息:", e$message)) tibble() }) } # 3. 批量抓取并合并所有表格 all_tables <- map_dfr(urls, scrape_table) # 查看合并后的结果 head(all_tables)
关键说明
map_dfr会自动把每个页面返回的表格按行合并成一个大的数据框,省去手动拼接的繁琐操作tryCatch用来处理单个页面的异常(比如页面不存在、网络波动),不会因为某一个页面出错导致整个批量任务终止- 可选的
source_url列可以帮你定位单条数据的来源页面,方便后续校验和排查问题
内容的提问来源于stack exchange,提问作者dd2
相关产品推荐
相关产品推荐

