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

如何用Python下载需等待5秒才触发的文件?

解决SourceForge延迟跳转文件的下载问题

你遇到的问题是因为SourceForge的这个链接并非直接文件地址,而是一个等待跳转的中间页面,wget和urllib直接请求会下载到页面的HTML代码,而非实际文件。以下是两种可行的解决方案:

方法一:利用requests自动追踪重定向

SourceForge的跳转页面最终会通过HTTP重定向指向真实文件,使用requests库并开启重定向追踪,同时模拟浏览器请求头即可获取文件:

import requests

# 目标链接
download_url = "https://sourceforge.net/projects/esp32-s2-mini/files/latest/download"
# 模拟浏览器请求头,避免被识别为爬虫
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"
}

# 发送请求,允许自动重定向
response = requests.get(download_url, headers=headers, allow_redirects=True)
# 保存文件到本地
with open("esp32-s2-mini-latest.zip", "wb") as file:
    file.write(response.content)

方法二:解析跳转页面获取真实链接

如果自动重定向失效,可以手动解析中间页面的跳转指令,等待指定时间后请求真实文件地址:

import requests
from bs4 import BeautifulSoup
import time

download_url = "https://sourceforge.net/projects/esp32-s2-mini/files/latest/download"
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"
}

# 获取中间跳转页面
page_response = requests.get(download_url, headers=headers)
soup = BeautifulSoup(page_response.text, "html.parser")

# 提取页面中的refresh跳转指令
refresh_meta = soup.find("meta", attrs={"http-equiv": "refresh"})
if refresh_meta:
    # 解析出真实文件链接(格式为 "5; url=真实地址")
    real_download_url = refresh_meta["content"].split("url=")[1]
    # 模拟页面等待的5秒
    time.sleep(5)
    # 下载真实文件
    file_response = requests.get(real_download_url, headers=headers, allow_redirects=True)
    with open("esp32-s2-mini-latest.zip", "wb") as file:
        file.write(file_response.content)

注意事项

  • 一定要设置User-Agent请求头,SourceForge会拦截无标识的爬虫请求,返回错误内容。
  • 如果遇到下载失败,可以尝试更换不同的User-Agent值,或者添加Accept-Language等其他浏览器常用请求头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:45:44