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

遍历列表网页爬取遇404错误的处理方案咨询

问题解决:爬取邮编信息时跳过无效项并记录错误

问题背景

爬取澳大利亚邮编对应郊区信息时,使用的外部邮编列表包含无效项,访问不存在的页面会触发Error in open.connection(x, "rb") : HTTP error 404.错误,导致循环中断,需手动删除无效项后重启,希望能自动记录错误行并继续执行循环。

原代码:

postcodes <- read.csv("C:/postcode list.csv")

data <- data.frame(matrix(ncol = 7, nrow = 0))

for (i in 1:nrow(postcodes)){ 

url <- paste0("https://www.domain.com.au/suburb-profile/",postcodes[i,])

page <- read_html(url)

contentnodes <- page %>%
  html_element("div.css-0") %>%
  html_table() %>%
  `[`(-1)

contentnodes$suburb <- paste0(postcodes[i,])

 data <- rbind(data,contentnodes)
  
  print(i)

  Sys.sleep(6)

}

优化方案

使用tryCatch捕获请求和解析过程中的错误,同时记录出错的行号,让循环继续执行。具体修改如下:

postcodes <- read.csv("C:/postcode list.csv")

# 初始化存储数据的data.frame和错误记录向量
data <- data.frame(matrix(ncol = 7, nrow = 0))
error_rows <- c()

for (i in 1:nrow(postcodes)){ 
  tryCatch({
    url <- paste0("https://www.domain.com.au/suburb-profile/", postcodes[i,])
    page <- read_html(url)
    
    contentnodes <- page %>%
      html_element("div.css-0") %>%
      html_table() %>%
      `[`(-1)
    
    contentnodes$suburb <- paste0(postcodes[i,])
    data <- rbind(data, contentnodes)
    
    print(paste("成功爬取第", i, "行"))
  }, error = function(e) {
    # 记录错误行号和错误信息
    error_rows <<- c(error_rows, i)
    print(paste("第", i, "行爬取失败,错误信息:", e$message))
  })
  
  Sys.sleep(6)
}

# 循环结束后输出错误行
print("爬取完成,出错的行号:")
print(error_rows)

# 可选:将错误行保存到文件
write.csv(data.frame(error_row = error_rows), "C:/error_postcodes.csv", row.names = FALSE)

关键说明

  • tryCatch块包裹单次爬取的所有操作,出现404或其他错误时,会执行error分支代码,记录错误行号且不中断循环
  • 新增error_rows向量专门存储出错行号,循环结束后可统一处理这些无效项
  • 优化打印信息,方便实时查看爬取状态
  • 可选择将错误行导出到文件,后续直接从原邮编列表中删除这些行即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:05:23