项目研究站 · 第三方 Python 库

investpy 还能用吗:从安装到取数的中文实测手册

该库是 alvarobartt 开发、用来从 Investing.com 取全球金融数据的 Python 库。官方 README 顶部已写明「因 Investing.com API 变更,当前不能正常工作」,但中文教程普遍仍在教「免费、无限制、多资产统一接口」。本站把 2026-10-12 的本机实测结果摊开:哪一步会失败、报什么错、失败在链路的哪一层、哪些能力其实还能用。

官方源:GitHub / PyPI本机实测:2026-10-12环境:Windows + Python 3.11.9许可:MIT

项目来源:alvarobartt/investpy 仓库当前状态

GitHub 页面显示约 1.9k Star · 378 Fork · MIT license · 最新 Release v1.0.8(页面标注 4 年前);采集于 2026-10-12,数字会随社区活动变化,最终以仓库页面为准。

alvarobartt/investpy 的 GitHub 仓库页面截图:仓库名、Star 与 Fork 数量、master 分支、MIT license 与最新 Release 查看源码
仓库页截图只证明项目来源与仓库当前状态(Star / Fork / 许可 / Release),不证明本机安装成功,也不证明任何接口当前可用;该库与 EasyClaw 无已证实集成。
开源库 · MITGitHub 约 1.9k Star;采集于 2026-10-12,数字会变
数据源 · Investing.com第三方抓取封装,不是官方 SDK,也不需要 API Key
最新发布 · v1.0.8PyPI 上传于 2022-01-24;master 最后提交 2022-10-02
当前状态 · 分层结论离线名录可用;联网取数被 Cloudflare 返回 403
Positioning

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 年之后发生的事。

Status

官方说法与本机实测差在哪?

下表左列是官方源(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.93.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 与你自己环境的复测为准。

How it works

investpy 的数据从哪里来,断点在哪一层?

它不是 SDK,而是一层 requests 封装:本地名录 + Investing.com 的网页内部端点。看懂这条链路,就能自己判断哪些报错该改代码、哪些只能等对方放行。

你的代码get_*_historical_data / search_quotes
investpy 封装requests + 本地名录 CSV + 随机 UA
Investing.com 内部端点SearchInnerPage / HistoricalDataAjax
Cloudflare 边缘本机实测返回 403(断点在此层)
依据仓库源码与本机实测整理的链路示意,不是官方架构图。断点位于「Investing.com 边缘」一层:investpy 已发出请求、对方在返回内容前就拒绝,因此库内没有任何可修的代码路径。
链路层实现一手来源当前状态出问题时你能做什么
本地名录随包 CSV,经 pandas 读入后转 list/dictinvestpy/data/*.py、pd.read_csv 调用可用无需处理;可当离线字典使用
参数校验枚举表校验 country / products / interval / product_typeutils/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 网页内部端点,非公开 APIsearch.py / search_obj.py / stocks.py403只能等对方策略变化,或换数据源
结果解析lxml / 正则抽取 → 组装 DataFrame 或对象utils/data.py、_convert2df不可达上游没数据,解析层不会被执行
Scope

哪些事 investpy 现在做得到、哪些做不到?

把「能用」拆到任务粒度,比一句「挂了」更有用:名录类任务今天仍然可以拿它当离线字典,行情类任务则需要换方案。

任务现在能不能做依据替代建议
枚举某国全部股票代码能(离线)本机实测 get_stocks_list(country='china') 返回 3339 条无需替代,可直接使用
查某个资产属于哪类、哪个交易所能(离线,看名录)名录与 COUNTRY_FILTERS、PAIR_FILTERS 常量表可读注意 exchange 字段只在联网搜索时才填充
按名称搜索资产并拿到资产 ID不能search_quotes 返回 ERR#0015: error 403改用带官方接口的数据源
取历史日线 OHLCV不能get_stock_historical_data 等全部 403AkShare / Tushare / yfinance 之类
取实时/近期报价不能get_*_recent_data 走同一端点换数据源或券商/交易所接口
取技术指标与经济日历不能technical_indicators / economic_calendar 走同一域本地用 pandas-ta 之类自算指标
Reading route

按你的任务选一条阅读路线

本站不按「功能罗列」组织,而按你要完成的任务组织。下表是任务到页面的直接映射。

你的任务先去哪一页看完能拿到什么
判断这个库还值不值得投入时间该库还能用吗四层探测矩阵与 403 的分层归因
现在就要把它装上安装与 Python 支持失败原文、修复命令、依赖解析结果
想按名称找到某只资产search_quotes 与 SearchObj参数枚举、返回字段、五个取数方法
想搞清楚返回值结构历史数据与返回列DataFrame 的索引、列名与日期格式
想知道支持哪些资产九类资产与函数映射资产↔函数↔参数枚举的完整对照
要取 A 股或港股A 股与港股代码映射名录规模、代码形态、参数写法
要拿数据去做回测数据口径审计复权/成交量/时区等六项检查清单
已经决定换工具迁移选型按任务分流的替代方案对照
EasyClaw demo

不写代码的话,行情、指标和筛选结果怎么拿到

自建 investpy 脚本的前提是先有一套装得上的 Python 环境,而它当前联网取数会被 Cloudflare 拦在 403(见上一节)。如果你只是想知道某只标的现在的技术面状态、某段区间的涨跌,或者某个板块里有哪些标的符合条件,可以跳过环境这一层直接问。下面两张截图是 EasyClaw 技能在同一类任务上的输出,作为免编码路线的参考——需要把数据接进自己的模型或回测管道时,仍然应该走上一节说的自建或迁移路线。

No-code boundary

走免编码路线要接受哪些边界

截图能证明技能把这类问题答出来了,不能证明它替代了 investpy 的全部用途。把免编码路线用在金融数据任务之前,下面三项先确认清楚。

边界具体表现你要先确认什么
数据来源与 investpy 无关截图里的行情与指标由技能内部实现取数与计算,既不经过 investpy,也不经过 Investing.com技能所用的数据源与口径是否满足你的研究要求
结果不可批量复现对话式输出适合单只标的、单一板块;要跑几百只标的仍然需要脚本你的任务规模是单点查询还是批量管道
授权状态要自查本机技能目录中可见不等于已安装或已授权,部分技能需要自备 Key 或通行证你本机相关技能的实际可用状态

两条路线可以并存:先用技能把结论看清楚,再决定要不要为这件事搭一套数据管道;已经有管道的人,也不必为了一次查询重写代码。investpy 与 EasyClaw 之间没有已证实集成,上表比较的是任务分工,不是替代关系。

License

许可与使用边界:免费不等于可以随便用

代码许可是 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 现在到底还能不能用?
分两层:随包发布的离线名录(股票/基金/ETF/指数/债券/凭证/加密货币/商品/货币对)在本机实测中全部正常返回;联网取数(搜索、历史数据、近期数据、信息、技术指标、经济日历)在本机 2026-10-12 的实测中全部被 Cloudflare 以 HTTP 403 拦下,investpy 抛出 ConnectionError: ERR#0015: error 403。这个结论只覆盖本机与本次网络出口,你所在环境可能不同,请自行复测;官方 README 顶部也有「当前不能正常工作、建议先用 investiny」的说明,以官方为准。
pip install investpy 为什么报 bdist_wheel 错误?
因为 PyPI 上的 investpy 只发布源码包(sdist),没有 wheel,安装时必须本地构建元数据;新版 pip 的构建隔离环境里不再预置 wheel,于是报 error: invalid command 'bdist_wheel' 并终止于 metadata-generation-failed。本站实测的修复方式是先 pip install setuptools wheel,再 pip install investpy --no-build-isolation,命令与输出记录在安装页。具体行为以你本机 pip 版本为准。
装上以后为什么取不到数据?
因为「能装」和「能取数」是两件独立的事。装好只说明 Python 能 import 这个包;真正的数据来自 Investing.com 的内部端点,而该端点在实测中直接返回 403,请求根本没到 investpy 的解析代码。可用性四层(装得上 / import 得到 / 名录可读 / 端点可通)的逐层结果见状态页。
investpy 是 Investing.com 官方 API 吗?
不是。官方 README 的免责声明明确写了 investpy 与 Investing.com 及任何关联公司没有任何关系,它是一个为研究目的开发的第三方封装,作者称其「以利他方式」实现。也正因为不是官方接口,对方的页面或防爬策略一变,整个库就会失效。数据来源仍应标注为 Investing.com。
investpy 的资产数量可信吗?
README 给出的数字与随包名录基本同源,但并非完全一致。本站逐国枚举后的实测结果是:股票 39952(与 README 一致)、基金 82219(README 82221)、ETF 11448(README 11403)、指数 7788(README 7797)、货币对 2031(README 2029)、债券 688、商品 66、凭证 250 均一致;加密货币实测 1037 条,而 README 写 4697。这些数字是「随包名录快照」,不等于「当前能抓到多少」,逐项对照见资产清单页。
可以用 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 不用了,应该换成什么?
按任务分流,而不是按名气选:只要资产名录,investpy 的离线名录仍然够用;要历史行情,海外标的可看 yfinance 一类,A 股可看 AkShare / Tushare(后者需 Token);要出版级图表,可看 chart-image 这类专用工具。作者本人推荐的 investiny 也需要实测——它的 PyPI 元数据把依赖钉在 httpx<0.24、pydantic<2,与当前环境可能存在冲突。详见迁移选型页。

先判断你的任务属于哪一类?

只是要一份全球资产名录,investpy 的离线部分今天仍然够用;要历史行情,就先看可用性结论再看迁移选型,别把时间花在修一个改不动的地方。