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

R语言批量爬取CGSpace多页面文档链接与标题的问题求助

R批量爬取CGSpace木薯文档(1-342页)并生成DataFrame

问题分析

你遇到的「replacement has length zero」错误,大概率是某一页抓取时未获取到标题/链接(比如页面加载失败、目标元素不存在),导致赋值操作时长度不匹配。用单个循环可以更灵活地处理异常,避免程序中断。

解决方案代码

# 加载所需包
library(rvest)
library(dplyr)

# 初始化空的结果DataFrame
result_df <- data.frame(title = character(), link = character(), stringsAsFactors = FALSE)

# 定义基础URL(替换成你实际的CGSpace木薯搜索页URL,确保末尾是页码参数)
base_url <- "https://your-cgspace-url/cassava?page="

# 循环遍历1到342页
for (page_num in 1:342) {
  # 构造当前页URL
  current_url <- paste0(base_url, page_num)
  
  # 尝试抓取页面,捕获异常避免程序中断
  tryCatch({
    # 读取页面内容
    page <- read_html(current_url)
    
    # 抓取文档标题(替换成你之前验证过的正确选择器)
    titles <- page %>% 
      html_elements("h3.document-title a") %>%  # 示例选择器,根据实际页面调整
      html_text2()
    
    # 抓取文档链接(注意拼接完整URL,避免相对路径)
    links <- page %>% 
      html_elements("h3.document-title a") %>% 
      html_attr("href") %>% 
      paste0("https://your-cgspace-url", .)  # 替换成CGSpace域名,拼接完整链接
    
    # 如果当前页有数据,追加到结果DataFrame
    if (length(titles) > 0 && length(links) > 0) {
      temp_df <- data.frame(title = titles, link = links, stringsAsFactors = FALSE)
      result_df <- bind_rows(result_df, temp_df)
    }
    
    # 打印当前进度,方便跟踪
    cat("已完成第", page_num, "页抓取,累计", nrow(result_df), "条数据\n")
    
    # 延迟1秒,避免请求过于频繁被服务器拦截
    Sys.sleep(1)
  }, error = function(e) {
    # 打印错误信息,继续下一页
    cat("第", page_num, "页抓取失败:", e$message, "\n")
  })
}

# 查看最终结果
head(result_df)

关键注意事项

  • 选择器验证:确保html_elements里的选择器和你单页爬取时的一致,比如如果标题是在div.title a里,就替换成对应的选择器。
  • 完整链接拼接:如果抓取到的是相对路径(比如/handle/123/456),必须拼接CGSpace的域名,否则链接无效。
  • 异常处理:tryCatch能捕获页面加载失败、选择器失效等错误,保证循环不会中途终止。
  • 请求延迟:Sys.sleep(1)可以降低服务器压力,避免被反爬机制拦截,也可以根据情况调整延迟时间。

内容的提问来源于stack exchange,提问作者Miguel Angel Acosta Chinchilla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:50:27