通过For循环抓取多页数据并合并为DataFrame的实现问题
解决方案
不用纠结初始行数,直接用列表存储每一页的结果,最后一次性合并成大DataFrame即可,这是R中处理多页数据抓取最简洁高效的方案。
具体实现步骤
- 定义要抓取的页码范围(如1到10)
- 用
lapply遍历每个页码,构造对应URL并调用你的scraplinks函数,将每一页结果存入列表 - 用
dplyr::bind_rows()或data.table::rbindlist()合并列表内所有DataFrame
示例代码
# 若使用dplyr则加载包 library(dplyr) more_than_one_page <- function(base_url, max_page = 10) { # 生成1到max_page的页码序列 page_nums <- 1:max_page # 遍历页码,抓取每一页数据并存入列表 page_data_list <- lapply(page_nums, function(page) { # 构造当前页的完整URL current_url <- paste0(base_url, "@intpagenr_", page) # 调用你已实现的scraplinks函数 scraplinks(current_url) }) # 合并所有页数据为单个DataFrame combined_data <- bind_rows(page_data_list) return(combined_data) } # 调用示例(替换为你的实际基础URL) # base_url <- "https://your-target-site.com/base-path" # final_df <- more_than_one_page(base_url)
补充说明
- 只要
scraplinks返回的是数据框,bind_rows会自动匹配列名,无需担心不同页的列顺序差异 - 若处理大数据量,推荐用
data.table::rbindlist(),合并速度更快,用法与bind_rows类似 - 可在循环中加入
Sys.sleep(1)这类延迟,避免请求过于频繁触发网站反爬机制
内容的提问来源于stack exchange,提问作者Philipp Neuber
相关产品推荐
相关产品推荐

