接口用法 · 参数枚举与字段

investpy search_quotes 怎么用:参数枚举与 SearchObj 字段

官方 README 特别强调 search_quotes 是与 Investing.com 数据 1:1 对齐的函数,但它指向的官方文档页 search_api.html 已经 404。本站改从源码与运行时枚举还原这个函数的完整契约:参数取值有哪些、返回对象带哪些字段、能继续调用什么。

依据:investpy 1.0.8 源码枚举取自运行时实测时间:2026-10-12当前端点状态:403

一次搜索的对象流转

search_quotes()text / products / countries / n_results
搜索端点本机实测 403,未产生结果
SearchObjid_ / symbol / tag / country / exchange
5 个 retrieve_*近期 / 历史 / 信息 / 指标 / 币种
依据 search.py 与 utils/search_obj.py 整理的对象流转示意。本机在第二步即被 403 拦截,因此未产生真实的 SearchObj 实例——本页字段说明全部来自源码,不含实测数据。
investpy · Signature

investpy 的函数签名与四个参数

四个参数里有两个是过滤列表,它们的取值来自内置枚举表,写错会直接抛 ValueError,因此值得逐个记清。

参数类型是否必填取值来源说明 / 注意点
textstr必填自由文本空值或非字符串会抛 ERR#0074
productslist[str]可选PRODUCT_FILTERS 的 10 个键用复数(stocks 而非 stock);非 list 抛 ERR#0094,值非法抛 ERR#0095
countrieslist[str]可选COUNTRY_FILTERS 的 100 个国家名入参会被 lower().strip() 归一化,China 可以;值非法抛 ERR#0129
n_resultsint可选正整数等于 1 时返回单个对象而非列表;小于 1 抛 ERR#0088

返回值有个容易踩的坑:n_results 为 1 时返回单个 SearchObj,其余情况返回 list。写循环处理时如果不加判断,n_results=1 会因为对象不可迭代而报错。

investpy · SearchObj

SearchObj 有哪些字段,分别是什么含义?

搜索结果的每个条目都是一个 SearchObj。它的构造参数直接来自 Investing.com 的搜索返回,因此字段语义要按对方的定义理解。

字段来源字段含义注意点
id_pairIdInvesting.com 内部的资产 ID不是交易所代码;取历史数据时会作为 curr_id 参与请求
namename资产显示名同一公司常有多个市场多条记录,名称会重复
symbolsymbol交易代码不同市场的同一公司在各自市场有各自的 symbol
taglink站点路径片段公司简介、分红等接口用 tag 拼 URL,不是稳定的标识
countryflag 映射资产所属国家/地区加密货币与商品会被置为 None(源码中对这两类跳过国家映射)
pair_typepair_type 经 PAIR_FILTERS 映射资产类别映射表与搜索用的 PRODUCT_FILTERS 不是同一张表
exchangeexchange交易所名称只在搜索结果里存在;历史上取到的 DataFrame 并不包含它
data / information / technical_indicators / default_currency调用 retrieve 方法后填充延迟填充的结果容器未调用前为空,不要在取数前读取
investpy · Methods

SearchObj 上的五个取数方法分别走哪个端点?

拿到对象之后,真正的取数发生在这些方法里。它们各自走哪个端点、返回什么,决定了搜索之外还能做什么。

方法返回走的端点适用场景
retrieve_recent_data()DataFrame,仅最近若干条历史数据端点只想看最新几根 K 线;字段与历史数据一致
retrieve_historical_data(from_date, to_date)DataFrame,日期区间历史数据端点要完整区间做分析或回测
retrieve_information()资产信息(名称、代码、交易所、币种等)资产页面想确认代码与交易所的对应关系
retrieve_technical_indicators(interval='daily')技术指标数值技术指标端点需要对方算好的指标值,而不是自己算
retrieve_currency()默认币种资产页面做跨市场对比前先确认币种

本机现状:上述五个方法都依赖联网端点,在本站 2026-10-12 的实测中均无法走到(搜索阶段即 403)。本页的字段与方法说明全部来自源码,不是实测成功的结果,请勿当作「可用证明」。

investpy · Enums

investpy 的两张枚举表:products 与 countries 到底能填什么?

这是最容易出错的部分——两张表的命名风格不一样,而且还有第三张表在背后做映射。

枚举表用在哪取值风格完整取值
PRODUCT_FILTERSsearch_quotes(products=...)复数 / 小写indices, stocks, etfs, funds, commodities, currencies, cryptos, bonds, certificates, fxfutures
PRODUCT_TYPE_FILEStechnical_indicators(product_type=...)单数 / 下划线certificate, commodity, currency_cross, etf, fund, index, stock, bond
PAIR_FILTERS内部:把搜索返回的 pair_type 映射成可读类别单数 / 含 equitiesbond, certificate, commodity, crypto, currency, equities, etf, fund, fxfuture, indice
你写的值结果正确写法
products=['stock']ERR#0095 值非法products=['stocks']
products=['equities']ERR#0095 值非法(那是内部表的值)products=['stocks']
countries=['China']可以,内部会归一化成小写保持 'china' 更直观
countries=['HongKong']ERR#0129 值非法countries=['hong kong'](带空格)
n_results=1返回单个对象而非列表按需判断类型,或用 n_results=2 保持列表

国家名共 100 个(COUNTRY_FILTERS),全部小写、多词用空格分隔,例如 hong kong、united states、south korea、euro zone。完整清单可在资产清单页查到逐类国家的数量分布。

investpy · Troubleshoot

investpy search_quotes 的报错码与处理方式

下表把源码中与搜索相关的错误码整理出来。区分「你参数写错了」和「对方拒绝了请求」很关键,前者能改,后者改不了。

错误码 / 现象触发条件是谁的问题处理方式
ERR#0074text 为空或非字符串调用方传非空字符串
ERR#0094 / ERR#0128products / countries 不是 list调用方改成 list,即使只有一个值
ERR#0095 / ERR#0129过滤值不在枚举表内调用方按报错信息里给出的完整枚举改正
ERR#0088n_results 小于 1 或非整数调用方传 ≥1 的整数
ERR#0015HTTP 状态码不是 200对方 / 网络本机实测恒为 403,属不可修复类
ERR#0093请求成功但搜索结果为零调用方(多为关键词问题)换关键词或放宽过滤;注意这说明端点其实是通的

怎么区分:ERR#0093 与 ERR#0015 的差别决定了你的下一步——前者说明请求已经打到对方并拿到了 200,只是没有匹配结果,此时应该改搜索策略;后者说明请求根本没被接受,改进关键词毫无意义。

FAQ

investpy 常见问题:还能装吗、还能取数吗、换什么

search_quotes 和 get_stocks_historical_data 有什么区别?
前者按关键词搜索、返回可继续取数的对象,后者按「国家 + 代码」直接取历史数据。官方 README 特别指出 search_quotes 是与 Investing.com 数据 1:1 对齐的函数,因为它直接用对方的搜索服务;而按国家+代码取数依赖随包名录是否收录了该标的。选哪个取决于你已经知道代码还是只知道名称。
n_results 设成 1 为什么返回的不是列表?
这是源码里的既定行为:当 n_results == 1 且是用户显式指定时,函数直接返回单个 SearchObj,否则返回列表切片。这属于设计而非 bug,但写通用代码时要用 isinstance 判断,或干脆传 2 以上保持列表类型稳定。以源码实现为准。
为什么 countries 里写 'China' 可以,'HongKong' 不行?
因为 country 值来自一张固定的枚举表(COUNTRY_FILTERS,100 个国家/地区),函数会把你的输入统一转成小写并去空格后再查表。'China' 归一化后等于表里的 'china',可以命中;'HongKong' 归一化后是 'hongkong',而表里是 'hong kong'(带空格),所以查不到。写成 'hong kong' 即可。
products 到底用单数还是复数?
search_quotes 用复数:stocks、etfs、cryptos 等 10 个值。而 technical_indicators 的 product_type 用单数:stock、etf 等 8 个值。两套枚举互不通用,这是本站核对源码时发现的易错点,官方文档没写明。以源码中的 PRODUCT_FILTERS 与 PRODUCT_TYPE_FILES 为准。
SearchObj 的 tag 能直接当资产 ID 用吗?
不建议。tag 来自站点链接片段(例如 /equities/apple-computer-inc),它是页面路径而不是稳定主键;id_(内部 pairId)才是取数请求里用到的标识。如果你的流程需要持久化标识,优先存 id_ 与 symbol 的组合,并对变化做校验。
search_quotes 现在能跑通吗?
在本站 2026-10-12 的实测中不能:调用直接抛 ConnectionError: ERR#0015: error 403。本页的参数与字段说明来自源码与运行时枚举,不是实测成功的调用结果。建议你按可用性核验页的步骤在自己的环境里复测一次,用你自己的结果做决策。

搜索拿到资产之后,怎么把数据取出来?

下一步是历史数据与返回结构:DataFrame 的索引与列名决定了后续清洗与入库怎么写,日期格式写错是最常见的一类调用失败。