在 yfinance
仓库中,scrapers
和 screener
是两个不同但相关的功能模块,主要区别和联系如下:
1. 功能定位不同
scrapers
(数据抓取器)
- 定位:底层数据获取工具,负责从雅虎财经页面或 API 中直接抓取原始数据,并解析为结构化格式(如 JSON、DataFrame)。
- 典型场景:抓取股票持有者信息(如机构持有者、内幕交易数据)、实时行情数据、历史价格等。
- 示例模块:
scrapers/holders.py
中的Holders
类,通过_fetch
和_parse
方法从网页或 API 提取原始数据并清洗。
screener
(筛选器)
- 定位:上层数据筛选工具,基于预设条件或自定义查询,从市场数据中筛选符合条件的股票或资产。
- 典型场景:根据市值、市盈率、行业、地域等指标筛选股票(如“筛选美股中市值 > 1000 亿美元的科技股”)。
- 核心组件:
EquityQuery
和Screener
类,通过构建查询参数(如exchange
,market
,sector
)调用雅虎财经的筛选 API,返回筛选后的结果列表。
2. 数据流向与协作
scrapers
是screener
的数据基础:
screener
筛选时,可能依赖scrapers
提供的原始数据(如从雅虎 API 获取全量市场数据后再过滤),但更常见的是直接通过雅虎的筛选接口(如/v1/screener
端点)获取已筛选的结果,减少数据量。screener
封装了scrapers
的底层操作:
Screener
类通过fetch()
方法直接返回筛选后的结构化数据(如包含股票代码、名称、指标的 DataFrame),隐藏了底层抓取和解析细节,提供更便捷的高层接口。
3. 代码结构与模块关系
-
scrapers
模块:
位于yfinance/scrapers/
目录下,包含多个具体抓取器(如holders.py
,quotes.py
),专注于单一类型数据的获取和解析,代码更底层,可能包含网络请求、HTML 解析(如使用BeautifulSoup
)或 API 调用逻辑。 -
screener
相关代码:
位于yfinance/base.py
或yfinance/screener.py
(根据仓库结构),核心类Screener
通过组合查询参数(如qopts
,filter
)生成请求 URL,调用雅虎筛选 API,并解析返回的 JSON 数据为用户友好的格式(如字典列表)。
4. 使用场景对比
场景 | scrapers |
screener |
---|---|---|
需求 | 获取某只股票的详细持有者名单 | 筛选所有符合特定财务指标的股票列表 |
数据粒度 | 单只股票的深度数据(如前 50 大机构持有者) | 多只股票的概要信息(如代码、市值、市盈率等) |
接口复杂度 | 需要指定具体股票代码和数据类型(如 holders ) |
需要定义筛选条件(如 market="us" , sector="Technology" ) |
返回形式 | 结构化数据(如 DataFrame) | 筛选后的股票列表(含基础指标) |
总结:相辅相成的工具链
scrapers
:负责“精准抓取单一类型数据”,是底层数据获取的“工兵”。screener
:负责“批量筛选符合条件的资产”,是高层数据筛选的“筛选器”。- 关系:两者均服务于数据获取需求,
screener
基于scrapers
的底层能力(或直接调用 API 筛选接口),提供更高效的批量筛选功能,而scrapers
为screener
提供细粒度的数据支持,或用于获取筛选条件中未涵盖的深度数据。
通过组合使用这两个模块,用户可以灵活实现从“原始数据抓取”到“复杂条件筛选”的全流程金融数据处理。