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

R语言download.file()爬取网页返回403 Forbidden错误如何解决

问题根因

返回403 Forbidden是站点反爬策略拦截导致:R内置的download.file()默认发起请求时,携带的User-Agent会明确标识请求来自R脚本,和真实浏览器的请求特征不匹配,站点识别到非人工访问就会直接拒绝响应。手动通过浏览器访问无异常,正是因为浏览器会自动携带普通用户的合法请求头,不会被判定为爬虫。

解决方法
  • 优先使用支持自定义请求头的请求库,模拟真实浏览器特征绕过拦截
    不要用默认的download.file(),换用httr包自定义请求头,示例代码如下:
    # 首次使用先安装依赖
    install.packages(c("httr", "rvest"))
    library(httr)
    library(rvest)
    
    target_url <- 'https://www.punters.com.au/form-guide/'
    # 携带普通Chrome浏览器的User-Agent发起请求
    resp <- GET(
      target_url,
      user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36")
    )
    
    # 验证返回状态,返回200即请求成功
    print(status_code(resp))
    # 解析网页内容
    page_html <- content(resp, as = "parsed")
    
    如果仅加User-Agent仍被拦截,可以补充更多常规浏览器请求头,进一步降低被识别为爬虫的概率:
    resp <- GET(
      target_url,
      add_headers(
        `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
        `Accept` = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
        `Accept-Language` = "zh-CN,zh;q=0.9,en;q=0.8",
        `Referer` = "https://www.punters.com.au/"
      )
    )
    
  • 控制请求频率
    如果上述配置后仍偶发403,是因为站点对短时间高频请求做了拦截,在两次请求之间增加1-3秒的随机等待即可,不要连续批量发起请求:
    Sys.sleep(sample(1:3, 1))
    
注意事项
  • 爬取前请确认站点的访问规则,仅爬取公开可访问的内容,不要对站点服务器造成不必要的流量压力
  • 不要将爬取到的内容用于未经授权的商业用途

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:48:27