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

使用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,如果能正常加载页面,那就坐实了是反爬机制的问题;如果浏览器也打不开,那可能是网站本身的故障或者地区访问限制。

解决步骤

先从最简单的模拟浏览器请求开始尝试:

  1. 添加浏览器的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")
    
  2. 如果还是不行?
    可能网站还有更严格的防护:比如需要Cookie验证、IP频率限制,或者页面需要JavaScript渲染(rvest默认不支持JS渲染,这种情况可能需要用RSelenium或者playwright这类工具模拟真实浏览器操作)。不过先从User-Agent开始试,这是最常见的解决方案。

重要提醒

爬取网站前一定要查看网站的robots.txt文件(访问https://www.tomato.com.hr/robots.txt),确认目标页面是否允许被爬取,遵守网站的爬取规则,避免触发法律风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:31:02