yfinance源码解析-scrapers-screener-02


yfinance 仓库中,scrapersscreener 是两个不同但相关的功能模块,主要区别和联系如下:

1. 功能定位不同

scrapers(数据抓取器)

  • 定位:底层数据获取工具,负责从雅虎财经页面或 API 中直接抓取原始数据,并解析为结构化格式(如 JSON、DataFrame)。
  • 典型场景:抓取股票持有者信息(如机构持有者、内幕交易数据)、实时行情数据、历史价格等。
  • 示例模块scrapers/holders.py 中的 Holders 类,通过 _fetch_parse 方法从网页或 API 提取原始数据并清洗。

screener(筛选器)

  • 定位:上层数据筛选工具,基于预设条件或自定义查询,从市场数据中筛选符合条件的股票或资产。
  • 典型场景:根据市值、市盈率、行业、地域等指标筛选股票(如“筛选美股中市值 > 1000 亿美元的科技股”)。
  • 核心组件EquityQueryScreener 类,通过构建查询参数(如 exchange, market, sector)调用雅虎财经的筛选 API,返回筛选后的结果列表。

2. 数据流向与协作

  • scrapersscreener 的数据基础
    screener 筛选时,可能依赖 scrapers 提供的原始数据(如从雅虎 API 获取全量市场数据后再过滤),但更常见的是直接通过雅虎的筛选接口(如 /v1/screener 端点)获取已筛选的结果,减少数据量。
  • screener 封装了 scrapers 的底层操作
    Screener 类通过 fetch() 方法直接返回筛选后的结构化数据(如包含股票代码、名称、指标的 DataFrame),隐藏了底层抓取和解析细节,提供更便捷的高层接口。

3. 代码结构与模块关系

  • scrapers 模块
    位于 yfinance/scrapers/ 目录下,包含多个具体抓取器(如 holders.py, quotes.py),专注于单一类型数据的获取和解析,代码更底层,可能包含网络请求、HTML 解析(如使用 BeautifulSoup)或 API 调用逻辑。

  • screener 相关代码
    位于 yfinance/base.pyyfinance/screener.py(根据仓库结构),核心类 Screener 通过组合查询参数(如 qopts, filter)生成请求 URL,调用雅虎筛选 API,并解析返回的 JSON 数据为用户友好的格式(如字典列表)。

4. 使用场景对比

场景 scrapers screener
需求 获取某只股票的详细持有者名单 筛选所有符合特定财务指标的股票列表
数据粒度 单只股票的深度数据(如前 50 大机构持有者) 多只股票的概要信息(如代码、市值、市盈率等)
接口复杂度 需要指定具体股票代码和数据类型(如 holders 需要定义筛选条件(如 market="us", sector="Technology"
返回形式 结构化数据(如 DataFrame) 筛选后的股票列表(含基础指标)

总结:相辅相成的工具链

  • scrapers:负责“精准抓取单一类型数据”,是底层数据获取的“工兵”。
  • screener:负责“批量筛选符合条件的资产”,是高层数据筛选的“筛选器”。
  • 关系:两者均服务于数据获取需求,screener 基于 scrapers 的底层能力(或直接调用 API 筛选接口),提供更高效的批量筛选功能,而 scrapersscreener 提供细粒度的数据支持,或用于获取筛选条件中未涵盖的深度数据。

通过组合使用这两个模块,用户可以灵活实现从“原始数据抓取”到“复杂条件筛选”的全流程金融数据处理。