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
相关产品推荐
相关产品推荐

