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

如何跳过R爬虫中的HTTP error 504错误并标记无效页面

解决R语言爬虫中504错误页面的跳过与标记问题

要实现跳过错误页面并标记状态,核心是用tryCatch()捕获网络请求错误,同时预先创建数据框存储结果。以下是修改后的代码及关键说明:

修改后的完整代码

library(rvest)
library(dplyr)
library(stringr)
library(jsonlite)
library(readr)

# 获取顾问列表及链接
url <- "https://www.barrons.com/advisor/report/top-financial-advisors/100?id=/100/2022&type=ranking_tables"
doc <- fromJSON(txt = url)
result <- doc$data$data

# 提取顾问链接
link <- str_split_fixed(result$Advisor, "'", n = Inf)
advisor_links <- link[, 4]

# 初始化结果数据框,预留标记字段
output_df <- tibble(
  link = advisor_links,
  position = NA_character_,
  page_exists = TRUE
)

# 循环爬取每个顾问页面,捕获错误
for (i in seq_along(advisor_links)) {
  name_link <- advisor_links[i]
  tryCatch({
    # 正常爬取解析逻辑
    advisor_page <- read_html(name_link)
    position <- advisor_page %>% 
      html_nodes(".BarronsTheme--lg--18rTokdG p:nth-child(1)") %>% 
      html_text() %>% 
      paste(collapse = ",")
    output_df$position[i] <- position
  }, error = function(e) {
    # 错误处理:标记页面不存在,记录错误信息
    output_df$page_exists[i] <- FALSE
    output_df$position[i] <- "页面不存在(504错误)"
    message(sprintf("第%d位顾问页面爬取出错:%s", i, e$message))
  })
}

# 查看最终结果
print(output_df)

关键说明

  • 错误捕获:用tryCatch()包裹read_html()及后续解析代码,遇到504或其他网络错误时,会自动执行error代码块,不会中断整个循环。
  • 结果存储:预先创建tibble数据框,包含page_exists布尔字段,专门标记页面是否正常访问。
  • 安全循环:用seq_along(advisor_links)替代1:length(advisor_links),避免链接为空时出现循环范围错误。
  • 错误提示:通过message()输出错误位置和信息,方便调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:35:36