如何使用Python通过指定API URL下载XML格式数据文件?
用Python下载CAISO OASIS API数据的方法
首先,你需要先安装requests库(如果还没装的话),打开终端执行:
pip install requests
方案1:处理Zip包(符合API的SingleZip参数)
因为你的API URL里用了SingleZip参数,返回的其实是一个压缩包,里面包含目标XML文件。下面的代码会自动下载并解压这个Zip包:
import requests from zipfile import ZipFile from io import BytesIO # 你的API地址 api_url = 'http://oasis.caiso.com/oasisapi/SingleZip?queryname=PRC_FUEL&fuel_region_id=ALL&startdatetime=20130919T07:00-0000&enddatetime=20130928T07:00-0000&version=1' try: # 发送GET请求获取数据 response = requests.get(api_url) response.raise_for_status() # 如果请求返回错误状态码,直接抛出异常 # 把响应内容转换成Zip文件对象 with ZipFile(BytesIO(response.content)) as zip_file: # 先看看压缩包里有哪些文件 print("压缩包内的文件列表:", zip_file.namelist()) # 提取所有文件到当前目录 zip_file.extractall() print("文件已成功解压到当前目录!") # 如果你只想提取特定的XML文件,比如知道文件名是PRC_FUEL_xxx.xml,可以这样: # zip_file.extract("PRC_FUEL_20130919_20130928.xml") except Exception as e: print(f"下载或解压过程中出错:{e}")
方案2:直接保存为XML文件(如果浏览器直接返回XML)
如果你在浏览器里直接得到的是XML文件(可能浏览器自动帮你解压了),可以用下面的代码直接把响应内容保存为XML:
import requests api_url = 'http://oasis.caiso.com/oasisapi/SingleZip?queryname=PRC_FUEL&fuel_region_id=ALL&startdatetime=20130919T07:00-0000&enddatetime=20130928T07:00-0000&version=1' try: response = requests.get(api_url) response.raise_for_status() # 把内容写入本地XML文件 with open('caiso_fuel_report.xml', 'wb') as xml_file: xml_file.write(response.content) print("XML文件已成功保存!") # 如果需要直接查看或解析XML内容,可以用response.text获取文本格式 # xml_content = response.text # print("XML预览:", xml_content[:500]) except Exception as e: print(f"下载过程中出错:{e}")
小提示
response.raise_for_status()非常重要,它能帮你快速发现请求失败的问题(比如URL写错、权限问题等)。- 如果遇到HTTP请求的警告或证书问题(虽然这个API是HTTP协议,一般不会有),可以在
requests.get()里加上verify=False参数,但这会降低安全性,仅在测试环境使用。
内容的提问来源于stack exchange,提问作者Rexon
相关产品推荐
相关产品推荐

