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

使用urllib.request.urlretrieve批量下载文件报错求助

urllib批量下载报错unknown url type: 'https'排查思路

单文件下载正常,但批量拼接URL后触发urllib.error.URLError: <urlopen error unknown url type: 'https>错误,核心原因是拼接后的URL格式不合法,urllib无法识别正确的HTTP协议,可以按以下步骤排查:

  • 打印并检查拼接后的URL完整性
    循环中每次生成URL后,立刻用print()输出完整字符串,确认:

    • 必须以https://完整开头,不能缺失://,也不能在开头/结尾残留单引号、空格等多余字符(比如如果输出是'https://xxx...,引号会被当成URL的一部分,导致协议识别失败)
    • 复制输出的URL到浏览器,验证是否能正常访问,排除URL本身无效的情况
  • 排查字符串拼接语法错误

    • 避免用Pathlib拼接网络URL:Pathlib是用于本地文件路径的工具,处理网络URL会引入格式问题,必须用字符串拼接、f-string或str.format()
    • 检查基础URL是否正确:比如基础URL末尾是否多了/或者少了字符,比如错误写成httpswww.test-download.co.uk(缺失://),拼接后整个URL协议部分失效
    • 示例正确拼接方式:
      base_url = "https://www.test-download.co.uk/data/LEED/2025/021/LEED00GBR_S_2025021{}_01H_30S_MO.rnx.zip"
      for hour in range(24):
          hour_str = f"{hour:04d}"  # 生成0000、0100...2300格式的小时标识
          full_url = base_url.format(hour_str)
      
  • 检查循环变量的格式
    确保生成的小时段标识格式符合要求(比如必须是4位数字,如0100而非100),如果变量格式错误导致URL路径部分混乱,也可能间接引发协议识别问题。可以在循环中打印变量值,确认是否符合预期。

  • 验证URL编码合法性
    如果URL路径中存在特殊字符(即使当前场景不明显),可以用urllib.parse.quote()对路径部分进行编码,确保URL格式符合HTTP规范:

    from urllib.parse import quote
    path = f"LEED00GBR_S_2025021{hour_str}_01H_30S_MO.rnx.zip"
    encoded_path = quote(path)
    full_url = f"https://www.test-download.co.uk/data/LEED/2025/021/{encoded_path}"
    
  • 运行极简测试代码
    写一个只循环2-3个小时的极简批量代码,排除循环逻辑中的复杂干扰,比如:

    import urllib.request
    
    for hour in ["0000", "0100"]:
        url = f"https://www.test-download.co.uk/data/LEED/2025/021/LEED00GBR_S_2025021{hour}_01H_30S_MO.rnx.zip"
        save_path = f"C:/temp/data/2025021/LEED00GBR_S_2025021{hour}_01H_30S_MO.rnx.zip"
        print(url)
        urllib.request.urlretrieve(url, save_path)
    

    如果这段代码报错,直接检查打印的URL;如果正常,再逐步还原原代码的逻辑,定位问题点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:18:15