使用BeautifulSoup的Python脚本下载空ZIP文件问题求助
批量下载水文ZIP文件为空的解决方案
你遇到的空ZIP文件问题,核心原因是URL拼接错误,以及缺少请求状态校验。以下是具体分析和修复方案:
问题分析
- URL路径错误:你用
domain + zip_link拼接下载地址,但目标页面里的zip_link是当前目录下的相对路径(比如mch_d_2021_01.zip),正确的完整路径应该是原页面URL加上这个相对路径,而非根域名直接拼接。 - 缺少请求校验:未检查请求是否成功,即便返回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
相关产品推荐
相关产品推荐

