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

R语言网页爬取时出现Error in open.connection(x, "rb") : HTTP error 403错误的解决方案求助

解决US News页面403禁止访问的问题

我之前也踩过US News这类反爬严格网站的坑,403错误本质是网站检测到你的请求来自脚本而非真实浏览器。试试下面这些方案,应该能解决你的问题:

1. 模拟浏览器请求头(最常用的方法)

网站会通过User-Agent字段识别请求来源,只要把请求头改成普通浏览器的标识,就能绕过基础的反爬。用httr配合rvest实现的代码如下:

library(rvest)
library(httr)

target_url <- "https://www.usnews.com/best-colleges/rankings/national-universities"
# 模拟Chrome浏览器的User-Agent,你也可以换成Firefox等其他浏览器的标识
browser_headers <- add_headers(
  `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
  `Accept-Language` = "en-US,en;q=0.9" # 可选,加上语言标识更真实
)

# 发送请求并解析页面
response <- GET(target_url, browser_headers)
if (http_status(response)$category == "Success") {
  page_content <- read_html(response)
  # 这里就可以开始提取数据了
} else {
  cat("请求失败,状态码:", http_status(response)$status_code, "\n")
}

2. 启用Cookie会话支持

有些网站会通过Cookie验证用户会话,开启Cookie存储能让请求更接近真实浏览器的行为:

library(curl)
library(rvest)

target_url <- "https://www.usnews.com/best-colleges/rankings/national-universities"
# 创建带有CookieJar的handle,保存会话Cookie
curl_handle <- new_handle(cookiejar = "usnews_cookies.txt")
handle_setheaders(curl_handle,
  `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
)

# 发送请求并解析
response <- curl_fetch_memory(target_url, handle = curl_handle)
if (response$status_code == 200) {
  page_content <- read_html(response$content)
} else {
  cat("请求被拒绝,状态码:", response$status_code, "\n")
}

3. 用RSelenium模拟真实浏览器(对付强反爬)

如果上面的方法都没用,说明网站可能有JavaScript渲染检测或者行为分析,这时候需要用真实浏览器模拟操作:

library(RSelenium)

# 启动Chrome浏览器(需要提前安装ChromeDriver并配置环境变量)
driver <- rsDriver(browser = "chrome", port = sample(4000:5000, 1)) # 随机端口避免冲突
web_driver <- driver[["client"]]

# 访问目标页面
web_driver$navigate("https://www.usnews.com/best-colleges/rankings/national-universities")
# 可以加个延迟,等待页面加载完成
Sys.sleep(3)

# 获取页面HTML并解析
page_source <- web_driver$getPageSource()[[1]]
page_content <- read_html(page_source)

# 操作完成后记得关闭浏览器和服务
web_driver$close()
driver$server$stop()

额外注意事项

  • 控制请求频率:不要短时间内发送大量请求,建议每次请求后加Sys.sleep(3-5),避免IP被封禁。
  • 遵守网站规则:爬取US News的数据前,务必查看他们的服务条款,确保你的使用行为符合规定,避免法律风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:47:33