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

如何让R语言脚本忽略错误,批量检测网站状态?

解决URL活跃状态检测脚本的异常处理问题

核心修改点

  1. 预处理URL:自动补全缺失HTTP协议的URL,标记空白URL
  2. 错误捕获机制:用tryCatch包裹请求逻辑,遇到无法解析、连接失败等错误时不会中断脚本,而是返回对应标记

修改后的完整代码

library(tidyverse)

# 读取并预处理URL数据
url_list <- read.csv("./file.csv") %>%
  select(-c(4:6, 8:11, 13)) %>%
  # 处理空白URL,给缺失http/https前缀的URL补全协议
  mutate(
    url = case_when(
      is.na(url) | url == "" ~ "[空白URL]",
      !str_detect(url, "^http(s)?://") ~ str_c("http://", url),
      TRUE ~ url
    )
  )

# 带异常处理的URL状态检测函数
check_status_code <- function(url) {
  # 先处理空白URL的情况
  if (url == "[空白URL]") {
    return("空白URL")
  }
  
  # 用tryCatch捕获所有请求错误
  tryCatch(
    {
      headers <- curlGetHeaders(url, verify = FALSE)
      http_status <- attributes(headers)$status
      # 提取状态码(比如"200 OK"只保留数字部分)
      str_extract(http_status, "^\\d+")
    },
    error = function(e) {
      # 根据错误类型返回对应信息
      if (str_detect(e$message, "No host part")) {
        "无效URL(无主机部分)"
      } else if (str_detect(e$message, "Could not resolve host")) {
        "无法解析主机"
      } else {
        str_c("请求错误:", e$message)
      }
    }
  )
}

# 批量检测所有URL状态
status_codes <- sapply(url_list$url, check_status_code)

# 输出结果到CSV
data.frame(URL = url_list$url, status_code = status_codes) %>%
  write.csv("url_status_codes.csv", row.names = FALSE)

代码说明

  • 预处理阶段:用case_when统一处理三种情况:空白URL标记为[空白URL],缺少http/https的自动补全,正常URL保持不变,避免因协议缺失导致的请求错误。
  • 错误捕获:tryCatch会拦截curlGetHeaders抛出的所有异常,根据错误信息返回更易读的状态描述,而不是直接中断脚本。
  • 状态码提取:从返回的状态信息(如"200 OK")中提取纯数字状态码,结果更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:42:41