基金实时估值抓取 Skill
概述
通过同花顺爱基金平台(fund.10jqka.com.cn)获取基金的重仓持股实时数据,
利用加权平均算法计算出基金的预计涨跌幅度。
核心能力
- 📊 单只/批量查询:支持一次查询一只或多只基金的实时估值
- 📈 加权算法:基于「占净资产比 × 股票日涨幅」的加权平均,计算预计涨跌幅
- 💾 多格式输出:表格展示 + JSON 文件保存
- ⚡ Playwright 驱动:处理 JavaScript 动态渲染的页面
数据来源
| 项目 | 来源 |
|------|------|
| 平台 | 同花顺爱基金 fund.10jqka.com.cn |
| 基金名称 | 页面 .name 或 h1 选择器 |
| 重仓持股 | #czContent ul > li 结构(序号、股票名、日涨幅、占比、市值) |
| 估值算法 | Σ(日涨幅 × 占比) / Σ(占比) |
使用方式
前置条件
- Python 3.8+
playwright包已安装(pip install playwright)- Playwright 浏览器已安装(
playwright install chromium)
执行脚本
核心脚本位于 scripts/fund_scraper.py,提供 CLI 接口:
# 查询单只基金
python scripts/fund_scraper.py --code 519674
# 批量查询(逗号分隔)
python scripts/fund_scraper.py --codes 519674,002190,161725,161726
# JSON 格式输出
python scripts/fund_scraper.py --code 519674 --format json
# 自定义输出路径
python scripts/fund_scraper.py --codes 519674,002190 --output my_result.json
# 显示浏览器窗口(调试用)
python scripts/fund_scraper.py --code 519674 --no-headless
CLI 参数说明
| 参数 | 缩写 | 必填 | 说明 |
|------|------|------|------|
| --code | -c | 二选一 | 单只基金代码(6位数字) |
| --codes | — | 二选一 | 多只基金代码,逗号分隔 |
| --format | -f | 否 | 输出格式:table(默认)/ json |
| --output | -o | 否 | 输出文件路径(JSON) |
| --headless | — | 否 | 无头模式(默认开启) |
| --no-headless | — | 否 | 显示浏览器窗口(调试用) |
| --timeout | — | 否 | 页面加载超时毫秒数(默认 60000) |
工作流程
当用户请求查询基金实时估值时,按以下步骤操作:
Step 1: 确认基金代码
从用户输入中提取基金代码。用户可能以以下方式提供:
- 直接给出代码:「查一下 519674」
- 给出多个代码:「看看 519674 和 002190」
- 给出名称但未给代码 → 需要询问或搜索确认
如果用户没有明确指定基金代码,必须先向用户确认。
Step 2: 执行抓取脚本
使用 execute_command 运行脚本。确保:
- 使用绝对路径调用脚本
- 设置适当的编码环境
- 根据用户需求选择参数格式
示例命令:
# 单只基金
PYTHONIOENCODING=utf-8 python "<SKILL_PATH>/scripts/fund_scraper.py" --code <FUND_CODE> --format json --output <OUTPUT_PATH>
# 批量基金
PYTHONIOENCODING=utf-8 python "<SKILL_PATH>/scripts/fund_scraper.py" --codes <CODE1>,<CODE2>,<CODE3> --format json --output <OUTPUT_PATH>
将 <SKILL_PATH> 替换为当前 skill 的实际路径,
将 <FUND_CODE> 替换为实际基金代码,
将 <OUTPUT_PATH> 替换为期望的输出文件路径(建议输出到工作区目录)。
Step 3: 读取结果
脚本执行成功后,读取输出的 JSON 文件,解析结果并向用户呈现:
{
"基金代码": "519674",
"基金名称": "银河创新混合A",
"抓取时间": "2026-04-10 16:30:00",
"预计涨跌幅": "+1.94%",
"状态": "success",
"重仓持股": [
{
"序号": 1,
"股票名称": "寒武纪",
"日涨幅": "+1.06%",
"占净资产比": "9.78%",
"市值": "138266.10万元"
},
...
]
}
Step 4: 向用户汇报结果
按以下格式汇总结果:
📈 基金实时估值报告
【银河创新混合A (519674)】
⏰ 抓取时间:2026-04-10 16:30
📊 预计涨跌幅:+1.94%
✅ 状态:数据完整(10 只重仓股)
重仓股贡献明细:
#1 寒武纪 +1.06% (占比 9.78%)
#2 海光信息 +2.12% (占比 9.77%)
...
对于批量查询结果,制作对比汇总表。
Step 5: 异常处理
| 错误现象 | 处理方式 |
|----------|----------|
| 页面加载超时 | 增加 --timeout 参数值(如 90000),或稍后重试 |
| 未找到持仓数据 | 可能是基金类型不支持(如货币基金),告知用户 |
| 所有数据显示"暂无数据" | 可能是非交易时间或盘前/盘后时段,提示用户 |
| Playwright 未安装 | 提示运行 pip install playwright && playwright install chromium |
| 基金代码无效 | 校验代码应为6位数字 |
输出规范
必须包含的信息
- 基金基本信息:代码、名称
- 预计涨跌幅:加权计算结果,保留2位小数,带正负号
- 抓取时间:数据时效性参考
- 状态标识:正常 / 部分 / 失败
- 重仓持股明细:至少列出 Top 5 重仓股及其贡献
数值显示约定
- 涨跌颜色语义:中国股市惯例 — 涨(+)为红/正,跌(-)为绿/负
- 百分比格式:始终带
%符号和正负号,如+1.94%、-0.50% - 金额单位:万元,保留2位小数
注意事项
- 数据时效性:持仓数据来自最近披露的季报,不是实时的真实持仓变动;"预计涨跌幅"是估算值,基于假设持仓不变的前提下计算
- 交易时间限制:非交易时间段(周末、节假日、夜间)股票的"日涨幅"可能为前一交易日数据或无数据
- 频率控制:避免过于频繁地大量抓取,尊重目标网站的资源
- 算法局限:仅覆盖前十大重仓股,实际基金持仓可能包含更多股票,因此估算存在一定偏差
扫码联系在线客服