使用R rvest爬取网页遇URL拒绝,是否因网站防护所致?
问题分析与解决建议
是的,这几乎可以肯定是网站的反爬防护机制拦住了你的请求。那个"The requested URL was rejected"的提示加上支持ID,是很多网站的反爬系统(比如自定义WAF规则、常见的云防护工具)用来拦截非浏览器请求的典型表现。
为什么会出现这个问题?
大部分网站会检测请求的"身份标识"——你的R程序发出的请求默认没有携带浏览器的User-Agent头,或者携带的是R/httr的默认标识,很容易被网站识别为自动化爬虫,从而直接拒绝访问。
怎么验证?
你可以先手动打开Windows 7的浏览器(比如Chrome、Firefox),输入https://www.tomato.com.hr/telefonski-imenik,如果能正常加载页面,那就坐实了是反爬机制的问题;如果浏览器也打不开,那可能是网站本身的故障或者地区访问限制。
解决步骤
先从最简单的模拟浏览器请求开始尝试:
- 添加浏览器的User-Agent头
给你的请求加上和浏览器一致的User-Agent,让网站误以为是正常用户在访问。修改后的代码如下:library(rvest) library(httr) # 模拟Windows 7上Chrome浏览器的User-Agent browser_ua <- "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" # 创建会话时添加请求头 sess <- html_session("https://www.tomato.com.hr/telefonski-imenik", encoding = "UTF-8", handle = handle() %>% add_headers(`User-Agent` = browser_ua)) test <- read_html(sess, encoding = "UTF-8") - 如果还是不行?
可能网站还有更严格的防护:比如需要Cookie验证、IP频率限制,或者页面需要JavaScript渲染(rvest默认不支持JS渲染,这种情况可能需要用RSelenium或者playwright这类工具模拟真实浏览器操作)。不过先从User-Agent开始试,这是最常见的解决方案。
重要提醒
爬取网站前一定要查看网站的robots.txt文件(访问https://www.tomato.com.hr/robots.txt),确认目标页面是否允许被爬取,遵守网站的爬取规则,避免触发法律风险。
内容的提问来源于stack exchange,提问作者Mislav
相关产品推荐
相关产品推荐

