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

如何使用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)

关键说明

  1. URL模板化:用sprintf替换URL中的页码值,快速生成任意页的链接。
  2. 终止逻辑:通过判断表格行数,自动停止抓取无数据的页面。
  3. 反爬防护:加入Sys.sleep(1)让每次抓取间隔1秒,降低被网站拦截的风险。
  4. 数据合并:map_dfr自动将所有有效页面的表格按行合并为一个数据框。

额外建议

  • 先手动查看网站分页栏,确认最大页码,替换1:100为准确范围,减少无效请求。
  • 抓取后检查all_contracts的列名和数据结构,确保各页表格格式一致,避免合并出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:45:36