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

使用BeautifulSoup的Python脚本下载空ZIP文件问题求助

批量下载水文ZIP文件为空的解决方案

你遇到的空ZIP文件问题,核心原因是URL拼接错误,以及缺少请求状态校验。以下是具体分析和修复方案:

问题分析

  1. URL路径错误:你用domain + zip_link拼接下载地址,但目标页面里的zip_link是当前目录下的相对路径(比如mch_d_2021_01.zip),正确的完整路径应该是原页面URL加上这个相对路径,而非根域名直接拼接。
  2. 缺少请求校验:未检查请求是否成功,即便返回404等错误,依然会把空内容写入文件。

修复后的代码

from bs4 import BeautifulSoup
import requests

base_url = 'https://danepubliczne.imgw.pl/data/dane_pomiarowo_obserwacyjne/dane_hydrologiczne/dobowe/2021/'
filetype = '.zip'

def get_soup(url):
    response = requests.get(url)
    response.raise_for_status()  # 主动抛出请求错误
    return BeautifulSoup(response.text, 'html.parser')

for link in get_soup(base_url).find_all('a'):
    zip_link = link.get('href')
    if filetype in zip_link:
        print(f"正在下载: {zip_link}")
        # 拼接正确的下载URL:原页面URL + 相对路径
        download_url = base_url + zip_link
        try:
            response = requests.get(download_url)
            response.raise_for_status()
            # 清理文件名中的多余空格,避免保存异常
            filename = link.text.strip()
            with open(filename, 'wb') as file:
                file.write(response.content)
            print(f"{filename} 下载完成")
        except requests.exceptions.RequestException as e:
            print(f"下载 {zip_link} 失败: {e}")

关键改进点

  • 修正URL拼接:用base_url + zip_link生成正确下载地址,确保指向文件真实路径。
  • 添加错误处理:通过response.raise_for_status()捕获请求异常,避免写入空内容。
  • 优化文件名:用strip()去除文件名多余空格,减少保存时的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:21:36