项目研究站 · 第三方 Python 库
investpy 还能用吗:从安装到取数的中文实测手册
该库是 alvarobartt 开发、用来从 Investing.com 取全球金融数据的 Python 库。官方 README 顶部已写明「因 Investing.com API 变更,当前不能正常工作」,但中文教程普遍仍在教「免费、无限制、多资产统一接口」。本站把 2026-10-12 的本机实测结果摊开:哪一步会失败、报什么错、失败在链路的哪一层、哪些能力其实还能用。
项目来源:alvarobartt/investpy 仓库当前状态
GitHub 页面显示约 1.9k Star · 378 Fork · MIT license · 最新 Release v1.0.8(页面标注 4 年前);采集于 2026-10-12,数字会随社区活动变化,最终以仓库页面为准。
查看源码
investpy 解决什么问题,又不解决什么问题?
它的设计目标是「用一套统一的函数,把 Investing.com 上索引的全球金融产品都取下来」,因此按资产类别而不是按交易所组织接口。理解这一点,就能明白为什么它的失效方式也是「一整片」而不是「某一个市场」。
统一入口
九类资产共用同一套命名规范:get_stocks_historical_data、get_etfs_historical_data、get_cryptos_historical_data……换资产只需换函数名,取数逻辑不用重写。
免 Key 取数
不需要申请 API Key,也不走官方付费接口,而是直接请求 Investing.com 页面背后的内部端点。省掉了注册与配额,代价是把可用性交给了对方。
全球名录
随包发布的本地名录覆盖 91 个国家/地区的股票、62 个国家的基金、97 个国家的指数,A 股 3339 条、港股 1129 条代码可直接离线枚举。
不解决什么
它不做复权、不保证数据口径、不提供实时推送、没有官方 SLA,也不是 Investing.com 官方产品。行情端点一旦被对方拦截,库本身没有代理或重试兜底。
一句话定位:该库是「用爬取换零门槛」的思路——省掉 API Key,就必然接受「对方改一次页面、整个库一起失效」的代价。这正是 2022 年之后发生的事。
官方说法与本机实测差在哪?
下表左列是官方源(README / PyPI / setup.py)的原话或原文数字,右列是 2026-10-12 在本机隔离环境里跑出来的结果。差异本身就是本站最有价值的信息——官方文档不会告诉你 pip install 现在会失败。
| 项目 | 官方说法(一手来源) | 本机实测(2026-10-12) | 差值 / 适用场景 |
|---|---|---|---|
| 能否安装 | README:pip install investpy,Python 3.6 以上 | 直接执行失败:error: invalid command 'bdist_wheel' → metadata-generation-failed | 差在 pip 版本;换新 pip 的新手最容易卡这里 |
| 安装修复 | 官方未提供(只有「从源码装 master」) | 先装 setuptools wheel,再 pip install investpy --no-build-isolation 成功 | PyPI 只发布 sdist,没有 wheel,必须本地构建 |
| Python 支持 | setup.py:python_requires='>=3.7',CI 只跑 3.7/3.8/3.9 | 3.11.9 上可安装、可 import、离线名录可用 | 「未声明支持」不等于「不能跑」,属 qualified |
| 联网取数 | README 顶部警告:因 Investing.com API 变更,当前不能正常工作 | 搜索、历史数据、信息、加密货币端点全部 ConnectionError: ERR#0015: error 403 | 与警告一致;403 来自 Cloudflare 边缘 |
| 离线名录 | README 未单独说明名录可离线使用 | 股票/基金/ETF/指数/债券/凭证/加密货币/商品/货币对名录全部返回成功 | 官方没写,是实测发现的可用部分 |
| 加密货币数量 | README:4697 个加密货币 | 随包名录实际 1037 条 | 少约 3660 条(约 78%),名录与宣传口径不一致 |
| 文档可用性 | README 指向 investpy.readthedocs.io/usage.html | 该链接与 search_api.html 等 8 个页面返回 404,仅首页与 api.html 可打开 | 链接腐化,读文档前先确认页面存在 |
不要把它读成「全球都被封了」。实测只能证明「本机、本网络出口在 2026-10-12 被拦在 Cloudflare 边缘」,换网络、换出口、对方调整策略都可能变化;正式结论以官方 README 与你自己环境的复测为准。
investpy 的数据从哪里来,断点在哪一层?
它不是 SDK,而是一层 requests 封装:本地名录 + Investing.com 的网页内部端点。看懂这条链路,就能自己判断哪些报错该改代码、哪些只能等对方放行。
| 链路层 | 实现 | 一手来源 | 当前状态 | 出问题时你能做什么 |
|---|---|---|---|---|
| 本地名录 | 随包 CSV,经 pandas 读入后转 list/dict | investpy/data/*.py、pd.read_csv 调用 | 可用 | 无需处理;可当离线字典使用 |
| 参数校验 | 枚举表校验 country / products / interval / product_type | utils/constant.py | 可用 | 按报错里给出的枚举值改正入参 |
| 请求封装 | requests.post + random_user_agent()(66 条 UA,最新一条为 2017 年的 Chrome 62) | utils/extra.py、utils/constant.py:485 | 可用但无效 | 实测换成现代 Chrome UA 仍 403,改 UA 不是解 |
| 云端接口 | Investing.com 网页内部端点,非公开 API | search.py / search_obj.py / stocks.py | 403 | 只能等对方策略变化,或换数据源 |
| 结果解析 | lxml / 正则抽取 → 组装 DataFrame 或对象 | utils/data.py、_convert2df | 不可达 | 上游没数据,解析层不会被执行 |
哪些事 investpy 现在做得到、哪些做不到?
把「能用」拆到任务粒度,比一句「挂了」更有用:名录类任务今天仍然可以拿它当离线字典,行情类任务则需要换方案。
| 任务 | 现在能不能做 | 依据 | 替代建议 |
|---|---|---|---|
| 枚举某国全部股票代码 | 能(离线) | 本机实测 get_stocks_list(country='china') 返回 3339 条 | 无需替代,可直接使用 |
| 查某个资产属于哪类、哪个交易所 | 能(离线,看名录) | 名录与 COUNTRY_FILTERS、PAIR_FILTERS 常量表可读 | 注意 exchange 字段只在联网搜索时才填充 |
| 按名称搜索资产并拿到资产 ID | 不能 | search_quotes 返回 ERR#0015: error 403 | 改用带官方接口的数据源 |
| 取历史日线 OHLCV | 不能 | get_stock_historical_data 等全部 403 | AkShare / Tushare / yfinance 之类 |
| 取实时/近期报价 | 不能 | get_*_recent_data 走同一端点 | 换数据源或券商/交易所接口 |
| 取技术指标与经济日历 | 不能 | technical_indicators / economic_calendar 走同一域 | 本地用 pandas-ta 之类自算指标 |
按你的任务选一条阅读路线
本站不按「功能罗列」组织,而按你要完成的任务组织。下表是任务到页面的直接映射。
| 你的任务 | 先去哪一页 | 看完能拿到什么 |
|---|---|---|
| 判断这个库还值不值得投入时间 | 该库还能用吗 | 四层探测矩阵与 403 的分层归因 |
| 现在就要把它装上 | 安装与 Python 支持 | 失败原文、修复命令、依赖解析结果 |
| 想按名称找到某只资产 | search_quotes 与 SearchObj | 参数枚举、返回字段、五个取数方法 |
| 想搞清楚返回值结构 | 历史数据与返回列 | DataFrame 的索引、列名与日期格式 |
| 想知道支持哪些资产 | 九类资产与函数映射 | 资产↔函数↔参数枚举的完整对照 |
| 要取 A 股或港股 | A 股与港股代码映射 | 名录规模、代码形态、参数写法 |
| 要拿数据去做回测 | 数据口径审计 | 复权/成交量/时区等六项检查清单 |
| 已经决定换工具 | 迁移选型 | 按任务分流的替代方案对照 |
不写代码的话,行情、指标和筛选结果怎么拿到
自建 investpy 脚本的前提是先有一套装得上的 Python 环境,而它当前联网取数会被 Cloudflare 拦在 403(见上一节)。如果你只是想知道某只标的现在的技术面状态、某段区间的涨跌,或者某个板块里有哪些标的符合条件,可以跳过环境这一层直接问。下面两张截图是 EasyClaw 技能在同一类任务上的输出,作为免编码路线的参考——需要把数据接进自己的模型或回测管道时,仍然应该走上一节说的自建或迁移路线。
A · 对贵州茅台(600519)提问技术面:MACD 柱 0.74、DIF -12.15 / DEA -12.52、RSI 56.86 / 47.58 / 47.03、布林中轨 1269.54 元(收盘价低于中轨),结论是「下跌趋势中的短线修复」。这张截图是 EasyClaw 自己技能取数与计算的结果,不是本项目 investpy 的运行结果,数据也不是从 Investing.com 取来的;同一个指标换一套实现会有数值差异。investpy 与 EasyClaw 无已证实集成。仅供研究,不构成投资建议。
走免编码路线要接受哪些边界
截图能证明技能把这类问题答出来了,不能证明它替代了 investpy 的全部用途。把免编码路线用在金融数据任务之前,下面三项先确认清楚。
| 边界 | 具体表现 | 你要先确认什么 |
|---|---|---|
| 数据来源与 investpy 无关 | 截图里的行情与指标由技能内部实现取数与计算,既不经过 investpy,也不经过 Investing.com | 技能所用的数据源与口径是否满足你的研究要求 |
| 结果不可批量复现 | 对话式输出适合单只标的、单一板块;要跑几百只标的仍然需要脚本 | 你的任务规模是单点查询还是批量管道 |
| 授权状态要自查 | 本机技能目录中可见不等于已安装或已授权,部分技能需要自备 Key 或通行证 | 你本机相关技能的实际可用状态 |
两条路线可以并存:先用技能把结论看清楚,再决定要不要为这件事搭一套数据管道;已经有管道的人,也不必为了一次查询重写代码。investpy 与 EasyClaw 之间没有已证实集成,上表比较的是任务分工,不是替代关系。
许可与使用边界:免费不等于可以随便用
代码许可是 MIT,但数据不是你的:数据版权与条款属于 Investing.com。两者要分开看。
| 问题 | 事实 | 注意点 |
|---|---|---|
| 代码许可是什么 | MIT License(GitHub API 与仓库 LICENSE 一致) | 可商用、可修改、需保留版权声明 |
| 数据许可是什么 | 官方免责声明:非 Investing.com 官方、无附属关系,仅要求「注明数据来源」 | 数据版权仍属 Investing.com,转载/再分发需自行确认条款 |
| 能不能用于实盘决策 | 官方定位为研究用途 | 本项目不做任何收益承诺,数据也不保证准确或及时 |
| 能不能高频抓取 | README 写「FREE and NO LIMITATIONS」 | 这是作者对「无需 API Key」的描述,不是对方的服务承诺;实测已被边缘拦截 |
| 有没有官方支持 | 无商业版本、无 SLA;作者建议改用 investiny | 问题请走 GitHub Discussions,不要指望邮件支持 |
合规提示:把第三方网页抓取结果再分发给他人、或包装成自己的数据服务,属于你需要自行评估的合规问题。本站只陈述官方声明与源码事实,不构成法律意见。数据相关决策请以 Investing.com 的条款为准。
FAQ
investpy 常见问题:还能装吗、还能取数吗、换什么
investpy 现在到底还能不能用?
ConnectionError: ERR#0015: error 403。这个结论只覆盖本机与本次网络出口,你所在环境可能不同,请自行复测;官方 README 顶部也有「当前不能正常工作、建议先用 investiny」的说明,以官方为准。pip install investpy 为什么报 bdist_wheel 错误?
wheel,于是报 error: invalid command 'bdist_wheel' 并终止于 metadata-generation-failed。本站实测的修复方式是先 pip install setuptools wheel,再 pip install investpy --no-build-isolation,命令与输出记录在安装页。具体行为以你本机 pip 版本为准。装上以后为什么取不到数据?
investpy 是 Investing.com 官方 API 吗?
investpy 的资产数量可信吗?
可以用 investpy 取 A 股数据吗?
get_stocks_list(country='china') 返回 3339 条 A 股代码、country='hong kong' 返回 1129 条港股代码,全部离线可得。行情层面在本机实测中不可用(同一批端点 403)。此外 Investing.com 的 symbol / tag / 内部 id 与交易所代码不是同一个概念,做代码映射时不要直接等同,详见 A 股与港股页。investpy 和 EasyClaw 是什么关系?
C:\Users\CF\.easyclaw\skills 下的技能目录中不存在 investpy 相关技能,本站也未做任何集成验证,因此全站标注为「无已证实集成」。若你只是想做金融数据分析,可对照 对比页按任务选择路线。investpy 不用了,应该换成什么?
httpx<0.24、pydantic<2,与当前环境可能存在冲突。详见迁移选型页。