Python如何从aspx链接下载并读取正确格式的CSV文件
解决方案
你当前的代码无法得到正确CSV的核心原因是:你请求的VisualizaConsultaFrame.aspx是动态数据展示页面,不是CSV文件的直接下载链接,直接GET请求返回的是HTML网页源码,存储为CSV/XLS格式自然会出现内容不符合预期的问题。
具体操作步骤
- 第一步:获取正确的下载请求参数
打开浏览器访问目标页面,按F12打开开发者工具,切换到「网络」标签,勾选「保留日志」,然后手动点击页面上的CSV下载按钮。在网络请求列表中找到触发下载的对应请求,记录以下信息:- 请求方法(大概率为POST,此类查询类页面通常需要提交查询参数)
- 请求头中的
User-Agent、Cookie、Content-Type等必填字段 - 若为POST请求,记录「载荷」中的表单参数内容
- 第二步:使用requests模拟下载请求
按照你抓取到的参数调整请求代码,示例结构如下:
import requests import pandas as pd # 替换为你抓到的实际下载请求URL,不一定是原页面URL url = "https://extra-ibre.fgv.br/IBRE/sitefgvdados/xxx_download_path" # 替换为你抓到的实际请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Content-Type": "application/x-www-form-urlencoded" } # 替换为你抓到的实际POST表单参数,如果是GET请求就删掉data参数,参数拼到URL后面 data = { "param1": "value1", "param2": "value2" } # 发送请求 response = requests.post(url, headers=headers, data=data) # 确认请求成功 response.raise_for_status() # 方案1:直接存为CSV文件 file_name = 'xgdvConsulta.csv' with open(file_name, 'wb') as f: f.write(response.content) # 方案2:直接读取为表格格式,无需存本地 # 注意根据实际编码调整encoding,葡萄牙语站点常用latin-1或utf-8-sig df = pd.read_csv(pd.io.common.StringIO(response.text), encoding="utf-8-sig") # 打印确认表格内容 print(df.head()) # 如果需要后续处理,直接操作df即可
- 第三步:编码适配
如果读取的CSV出现乱码,尝试替换encoding参数为latin-1、cp1252等南美洲站点常用编码即可解决。
内容的提问来源于stack exchange,提问作者lucasnascm
相关产品推荐
相关产品推荐

