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

如何用Python获取并下载隐藏在JavaScript后的MISO网站CSV文件?

解决MISO能源网站动态CSV链接的Python下载方案

这个网站的“Download to CSV”按钮并非直接提供静态链接,而是通过JavaScript触发后台接口生成临时下载地址,所以直接请求父页面拿不到有效下载链接。下面提供两种可行的解决方法:

方法一:直接抓取后台API接口

这是效率最高的方案,无需模拟浏览器,直接对接生成CSV的后台接口:

  1. 打开浏览器开发者工具(按F12),切换到「Network」标签页,勾选「Preserve log」选项。
  2. 点击页面上的“Download to CSV”按钮,观察网络请求列表,找到触发下载的请求(通常为POST类型,响应内容是CSV格式)。
  3. 复制该请求的URL、请求头(Headers)和请求体(Body),包括所有携带的参数(比如筛选条件、时间范围等)。
  4. 用Python的requests库模拟这个请求,将响应内容保存为CSV文件。

示例代码:

import requests

# 替换为你抓取到的真实API地址
api_url = "https://www.misoenergy.org/api/interactivequeue/downloadcsv"
# 模拟浏览器请求头,至少保留User-Agent和Referer字段
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "Referer": "https://www.misoenergy.org/planning/generator-interconnection/GI_Queue/gi-interactive-queue/"
}
# 替换为你抓取到的真实请求体参数,可能是表单或JSON格式
payload = {
    "filter_param1": "value1",
    "filter_param2": "value2"
}

# 发送请求并保存文件
response = requests.post(api_url, headers=headers, data=payload)
if response.status_code == 200:
    with open("miso_gi_queue.csv", "wb") as f:
        f.write(response.content)
    print("CSV文件下载完成")
else:
    print(f"请求失败,状态码:{response.status_code}")

方法二:用Selenium模拟浏览器点击

如果不想分析接口,直接模拟人工操作浏览器也能完成下载:

  1. 安装依赖:执行pip install selenium webdriver-manager(webdriver-manager可自动管理浏览器驱动,无需手动下载)。
  2. 编写代码打开目标页面、等待按钮加载、模拟点击操作,自动完成文件下载。

示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
import time

# 自定义浏览器下载路径(可选,不设置则用默认下载目录)
options = webdriver.ChromeOptions()
prefs = {"download.default_directory": "你的本地文件保存路径"}
options.add_experimental_option("prefs", prefs)

# 启动Chrome浏览器
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
driver.get("https://www.misoenergy.org/planning/generator-interconnection/GI_Queue/gi-interactive-queue/")

try:
    # 等待下载按钮加载完成,最长等待10秒
    download_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Download to CSV')]"))
    )
    # 点击下载按钮
    download_btn.click()
    # 根据文件大小调整等待时间,确保下载完成
    time.sleep(5)
    print("文件下载完成")
finally:
    # 关闭浏览器
    driver.quit()

注意事项:

  • 抓取API时,请求头和参数要与浏览器发起的完全一致,否则可能被服务器拦截。
  • 使用Selenium时,若页面加载缓慢,可适当延长等待时间;webdriver-manager会自动匹配浏览器与驱动版本,无需手动校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:35:34