解决 Python 下载 ZIP 文件失败的问题:从 DART 网站案例看关键点
引言
在用 Python 爬取网站内容时,下载文件(如 PDF 或 ZIP)是一个常见需求。然而,在访问韩国 DART(Data Analysis, Retrieval and Transfer System)网站(https://dart.fss.or.kr)时,我遇到了一个棘手的问题:通过 requests 库成功下载了 PDF 文件,但 ZIP 文件下载始终失败,返回空响应。本文将详细分析问题原因,分享解决思路,并总结通过代码获取网站内容时需要前期手动获取的关键信息,助你在类似场景中少走弯路。
问题描述
DART 网站提供公司披露文件的下载接口,包括 PDF(通过 pdf.do)和 ZIP(通过 zip.do)。我编写了一个 Python 脚本,从 listzip_zip.txt 文件读取下载链接,目标是将文件保存到本地 ./files 目录,文件名需添加 rcp_no_ 前缀,并正确处理韩文文件名。
初始代码逻辑如下:
- 使用
requests.Session维持会话。 - 访问 DART 主页、披露页面和
main.do页面初始化会话,获取 cookie(如JSESSIONID)。 - 设置请求头,模拟浏览器(包括
User-Agent、Referer等)。 - 对每个 URL,发送 GET 请求,提取
Content-Disposition中的文件名,保存文件。
代码片段(简化版):
import requests
import os
import re
session = requests.Session()
session.headers.update({
'User-Agent': 'Mozilla/5.0 ...',
'Accept': 'application/zip,application/pdf,*/*',
'Referer': 'https://dart.fss.or.kr/pdf/download/main.do?rcp_no=20250429800466&dcm_no=10620925'
})
# 初始化会话
session.get('https://dart.fss.or.kr/')
session.get('https://dart.fss.or.kr/dsaf001/main.do')
session.get('https://dart.fss.or.kr/pdf/download/main.do?rcp_no=20250429800466&dcm_no=10620925')
# 下载文件
url = 'https://dart.fss.or.kr/pdf/download/zip.do?rcp_no=20250429800466&dcm_no=10620925'
response = session.get(url, stream=True)
if response.status_code == 200:
content_length = response.headers.get('Content-Length')
if content_length == '0' or (content_length is None and 'Transfer-Encoding' in response.headers):
print('Empty response')
else:
# 保存文件逻辑
with open('file.zip', 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
运行结果:
- PDF 文件(
pdf.do)下载成功,文件名正确,内容完整。 - ZIP 文件(
zip.do)下载失败,日志显示:Empty response for https://dart.fss.or.kr/pdf/download/zip.do?rcp_no=20250429800466&dcm_no=10620925 (Content-Length: chunked) Response headers: { 'Date': 'Thu, 08 May 2

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



