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

使用Python从需登录网页下载zip文件却返回HTML文件的问题求助

问题核心原因

你下载文件的请求未携带登录后的身份凭证,服务器判定你未登录,因此返回了登录页面的HTML内容而非目标zip文件。

解决步骤

  1. 使用requests.Session()管理会话:自动同步所有请求的cookies、请求头等信息,不用手动传递登录凭证
  2. 下载请求携带必要的请求头:补充User-Agent、Referer等字段,避免被服务器的防盗链/反爬策略拦截
  3. 增加响应校验逻辑:下载前先判断返回内容类型是否正确,避免存下错误的HTML文件

修正后的代码示例

import requests
from bs4 import BeautifulSoup

# 初始化会话,全程用这个会话发请求,自动维护cookies
session = requests.Session()
# 统一设置请求头,和浏览器保持一致
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
    "Referer": "https://consumerpyramidsdx.cmie.com/kommon/bin/sr.php" # 替换为你登录后页面的实际地址
}

# 登录请求改用session发送
response = session.post('https://consumerpyramidsdx.cmie.com/kommon/bin/sr.php', headers=headers, params=params, data=data) 
soup = BeautifulSoup(response.content, "lxml")
baseurl= 'https://consumerpyramidsdx.cmie.com'
print(soup)

file_url = 'https://consumerpyramidsdx.cmie.com/kommon/bin/sr.php?kall=wsubsdl&fn=consumption_pyramids_20210630_MS&fmt=csv&rrurl=consumptionpyramidsdx'

# 下载同样用session发送,自动带登录cookies
rs = session.get(file_url, headers=headers)

# 先校验返回内容是否正确
if 'text/html' in rs.headers.get('Content-Type', ''):
    print("返回的是HTML页面,登录失效或请求参数错误,可打印rs.text排查原因")
else:
    with open('consumption_pyramids_20210630_MS_csv.zip', 'wb') as file:
        file.write(rs.content)
    print("文件下载成功")

额外排查技巧

  • 如果修改后还是返回HTML,可打开浏览器开发者工具的「网络」面板,找到点击下载时对应的请求,对比你的请求头、参数是否和浏览器一致,尤其是有没有临时生成的token、签名类参数
  • 不要写死下载链接,最好从登录后的页面soup中实时提取最新的下载地址,避免链接过期失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:54:10