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

在R中获取浏览器跳转后的目标URL,解决爬取404错误问题

获取R中重定向后的目标URL解决方案

你碰到的是服务器端重定向的问题——那些recaplink.php链接会在服务器层面跳转到真实的赛事回顾页面,但rvest::read_html()默认不会自动跟进这类重定向,所以才会返回404错误,而浏览器会自动处理跳转,因此能正常加载目标页面。

要在R里获取跳转后的最终URL,我们可以用httr包来发送带重定向跟进的请求,然后从响应里提取最终地址。下面是具体的实现步骤:

1. 加载所需包

除了你已经在用的tidyverse和rvest,还需要httr来处理HTTP请求的重定向逻辑:

library(tidyverse)
library(rvest)
library(httr)

2. 定义获取最终URL的函数

写一个简单的函数,发送GET请求并开启重定向跟进,然后从响应对象中提取最终的URL:

get_final_redirect_url <- function(initial_url) {
  # 发送GET请求,开启重定向跟进
  response <- GET(initial_url, followlocation = TRUE)
  # 从响应中提取跳转后的最终URL
  response$url
}

3. 测试单个链接

用你提到的第200个链接测试一下,验证是否能拿到正确的目标URL:

test_link <- "http://www.uscho.com/recaplink.php?gid=1_970_20172018"
get_final_redirect_url(test_link)
# 输出应该为:https://www.uscho.com/recaps/?p=171810970

4. 批量处理所有链接

用purrr::map_chr()批量处理你的link_list,一次性得到所有跳转后的目标URL:

final_link_list <- map_chr(link_list, get_final_redirect_url)

可选:添加请求延迟(避免被封禁)

如果担心短时间内发送大量请求被网站限制,可以给函数加个延迟,用purrr::slowly()实现每次请求间隔1秒:

# 创建带延迟的函数版本
get_final_url_slow <- slowly(get_final_redirect_url, rate = rate_delay(1))
final_link_list <- map_chr(link_list, get_final_url_slow)

之后你就可以用final_link_list里的URL调用read_html()获取赛事数据,不会再遇到404错误了。

内容的提问来源于stack exchange,提问作者Evan O.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:12:01