如何使用Python自动从Morningstar获取股票数据并导出Excel
自动导出Morningstar Excel数据的实现方案
下面给出两种可落地的实现思路,你可以根据自己的技术基础选择:
方案1:Selenium浏览器自动化(最适合新手,逻辑和手动操作完全一致)
不需要分析网站后台接口,完全模拟你手动点击下载的流程,调试成本低:
- 先安装依赖库:执行命令
pip install selenium pandas,同时安装和你Chrome/Edge浏览器版本匹配的对应WebDriver - 操作逻辑和你手动操作完全对齐,参考代码片段如下:
from selenium import webdriver from selenium.webdriver.common.by import By import time import os import pandas as pd # 配置文件下载路径,替换为你自己的本地存储目录 download_path = "你本地的文件存储路径" chrome_options = webdriver.ChromeOptions() prefs = {"download.default_directory" : download_path} chrome_options.add_experimental_option("prefs", prefs) # 遇到反爬拦截时可加下方参数隐藏自动化标识 # chrome_options.add_argument("--disable-blink-features=AutomationControlled") driver = webdriver.Chrome(options=chrome_options) # 打开目标页面 driver.get("https://lt.morningstar.com/gco59km9k1/snapshot/default.aspx?tab=7&Id=F00000NMH9&ClientFund=0&CurrencyId=CAD") time.sleep(3) # 等待页面加载完成,也可替换为显式等待提升稳定性 # 点击Chart Settings按钮,元素属性可以用浏览器F12开发者工具抓取 driver.find_element(By.ID, "替换为你抓取到的Chart Settings按钮ID").click() time.sleep(1) # 点击导出Excel按钮 driver.find_element(By.LINK_TEXT, "Export to Excel").click() time.sleep(5) # 等待文件下载完成 # 读取最新下载的Excel文件 file_list = os.listdir(download_path) latest_excel = max([f for f in file_list if f.endswith(".xlsx")], key=lambda x: os.path.getctime(os.path.join(download_path, x))) Stock = pd.read_excel(os.path.join(download_path, latest_excel)) # 关闭浏览器 driver.quit()
调试时如果出现元素找不到的报错,优先检查元素定位属性是否正确、页面是否加载完成,可以适当延长等待时间
方案2:抓包直接请求下载地址(无浏览器,运行效率更高)
适合需要高频运行的场景,不需要启动浏览器,资源占用低:
- 操作步骤:
- 打开浏览器F12开发者工具,切换到「网络」标签,手动点击一次「Export to Excel」
- 在请求列表中筛选找到返回类型为xlsx的请求,复制该请求的URL、请求头、请求参数
- 用
requests库发送相同的请求,将返回的二进制内容存储为本地Excel文件后用pandas读取即可
- 依赖安装命令:
pip install requests pandas
如果请求需要身份校验,记得把浏览器中对应的Cookie也复制到请求头中,Cookie过期后重新更新即可
内容的提问来源于stack exchange,提问作者Bob_Builder
相关产品推荐
相关产品推荐

