如何解决RStudio Cloud访问任意网站时出现的503错误?
解决R中
Error in open.connection(x, "rb") : HTTP error 503问题 问题描述
在Windows笔记本上运行最新版RStudio Cloud,完成学校文本挖掘练习时,使用rvest访问Amazon、IMDB、Glassdoor等网站始终触发HTTP error 503,无法完成初始连接。尝试过多种网上方案均无效,当前测试代码如下:
# 加载必要包 library(tidyverse) library(rvest) # 定义链接并读取页面 link = "https://www.glassdoor.ca/Reviews/Tesla-Reviews-E43129.htm" page = read_html(link) # 提取页面元素 emp_status = page %>% html_nodes(".eg4psks0") %>% html_text() headline = page %>% html_nodes(".reviewLink") %>% html_text() rating = page %>% html_nodes("#ReviewsFeed .mr-xsm") %>% html_text() pros = page %>% html_nodes(".v2__EIReviewDetailsV2__fullWidth:nth-child(1) span") %>% html_text() cons = page %>% html_nodes(".v2__EIReviewDetailsV2__fullWidth:nth-child(2) span") %>% html_text() # 保存数据框 tesla_emp_reviews = data.frame(emp_status, headline, rating, pros, cons, stringsAsFactors = FALSE)
可行解决方案
1. 伪装浏览器请求头
多数网站会拦截非浏览器发起的请求,用httr包添加浏览器风格的请求头即可绕过:
library(tidyverse) library(rvest) library(httr) # 构造浏览器请求头 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", `Accept` = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" ) # 带请求头发送请求并解析页面 response = GET("https://www.glassdoor.ca/Reviews/Tesla-Reviews-E43129.htm", headers) page = read_html(response) # 后续提取逻辑不变
2. 排查网络拦截与代理设置
- 确认本地防火墙、杀毒软件未拦截RStudio Cloud的网络请求
- 若使用代理,在R中配置代理信息:
# 设置HTTP/HTTPS代理地址 Sys.setenv(http_proxy = "http://你的代理地址:端口") Sys.setenv(https_proxy = "http://你的代理地址:端口") # 代理需要认证时添加以下两行 Sys.setenv(http_proxy_user = "用户名:密码") Sys.setenv(https_proxy_user = "用户名:密码")
3. 降低请求频率避免限流
503错误常因请求过于频繁被网站限流,添加随机延迟并遵守网站robots规则:
library(robotstxt) # 先检查网站是否允许爬取目标页面 paths_allowed("https://www.glassdoor.ca/Reviews/Tesla-Reviews-E43129.htm") # 每次请求前添加1-3秒随机延迟 Sys.sleep(runif(1, 1, 3))
4. 携带Cookie访问
部分网站需要Cookie才能正常加载页面,先在浏览器打开目标页面,复制Cookie到请求头:
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", `Cookie` = "从浏览器复制的完整Cookie字符串" ) response = GET("https://www.glassdoor.ca/Reviews/Tesla-Reviews-E43129.htm", headers) page = read_html(response)
5. 使用polite包规范爬取
polite包会自动处理请求头、延迟和robots规则,大幅降低被拦截概率:
library(polite) library(rvest) # 创建礼貌爬取会话,注明教育用途 session = bow("https://www.glassdoor.ca/Reviews/Tesla-Reviews-E43129.htm", user_agent = "你的学校邮箱(用于文本挖掘课程练习)") # 获取页面 page = scrape(session) # 提取数据 emp_status = page %>% html_nodes(".eg4psks0") %>% html_text()
内容的提问来源于stack exchange,提问作者Bodhi
相关产品推荐
相关产品推荐

