如何使用R语言抓取多页面网站内容并保存为CSV文件
R语言抓取多页面内容并保存为CSV文件
核心思路
原代码仅抓取了第一页,关键是利用URL中的页码参数(d-3998960-p=1里的1)循环生成各页链接,批量抓取后合并数据再保存。
完整实现代码
library(rvest) library(dplyr) library(purrr) # 定义带页码占位符的基础URL base_url <- "https://www.taneps.go.tz/epps/viewAllAwardedContracts.do?d-3998960-p={page}&selectedItem=viewAllAwardedContracts.do&T01_ps=100" # 定义单页抓取函数 scrape_single_page <- function(page_num) { # 生成当前页URL current_url <- sprintf(base_url, page = page_num) # 抓取页面并提取表格 page_content <- read_html(current_url) page_table <- html_table(page_content)[[1]] # 终止条件:如果表格无有效数据(行数过少),返回NULL if (nrow(page_table) <= 1) { return(NULL) } # 可选:添加延迟避免触发反爬 Sys.sleep(1) return(page_table) } # 批量抓取多页(这里先尝试1-100页,也可根据实际最大页码调整) all_contracts <- map_dfr(1:100, scrape_single_page) # 保存为CSV文件(row.names=FALSE避免生成多余行号) write.csv(all_contracts, "All_Awarded_Contracts.csv", row.names = FALSE)
关键说明
- URL模板化:用
sprintf替换URL中的页码值,快速生成任意页的链接。 - 终止逻辑:通过判断表格行数,自动停止抓取无数据的页面。
- 反爬防护:加入
Sys.sleep(1)让每次抓取间隔1秒,降低被网站拦截的风险。 - 数据合并:
map_dfr自动将所有有效页面的表格按行合并为一个数据框。
额外建议
- 先手动查看网站分页栏,确认最大页码,替换
1:100为准确范围,减少无效请求。 - 抓取后检查
all_contracts的列名和数据结构,确保各页表格格式一致,避免合并出错。
内容的提问来源于stack exchange,提问作者GASTONE DERECK
相关产品推荐
相关产品推荐

