如何跳过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
相关产品推荐
相关产品推荐

