爬虫抓取:上市公司财报爬虫与行业对比分析
Overview
自动抓取 A 股上市公司三大财务报表(利润表、资产负债表、现金流量表)及核心财务指标, 自动识别同行业上市公司,进行四维度横向对比分析(盈利能力 / 偿债能力 / 运营效率 / 成长性), 按加权评分输出综合排名。与 caibao-fenxi 技能协同:本技能负责数据采集与量化对比, caibao-fenxi 负责五维度深度分析。
核心能力
1. 财报数据抓取
通过东方财富公开 API 抓取上市公司三大报表和关键财务指标。
脚本: scripts/fetch_financial_data.py
使用方式:
# 抓取全部财报数据(三大报表+关键指标+公司信息)
python scripts/fetch_financial_data.py 600519
# 指定报告期
python scripts/fetch_financial_data.py SH600519 --dates 2023-12-31,2022-12-31
# 只抓取某张报表
python scripts/fetch_financial_data.py 600519 --statement balance
python scripts/fetch_financial_data.py 600519 --statement income
python scripts/fetch_financial_data.py 600519 --statement cashflow
python scripts/fetch_financial_data.py 600519 --statement indicators
输出: JSON 格式的结构化财务数据,包含:
- 公司信息(名称、行业、上市日期)
- 资产负债表(资产、负债、权益等)
- 利润表(收入、成本、利润等)
- 现金流量表(经营/投资/筹资现金流)
- 关键财务指标(ROE、毛利率、净利率、周转率等)
支持的股票代码格式: 600519 / SH600519 / 000001.SZ / SZ000001
2. 同行业公司获取
自动识别股票所属行业板块,获取同行业全部上市公司列表。
脚本: scripts/get_industry_peers.py
使用方式:
# 获取同行业公司(默认最多50家)
python scripts/get_industry_peers.py 600519
# 限制数量
python scripts/get_industry_peers.py SH600519 --limit 20
输出: JSON 格式的同行业公司列表,包含每家公司的代码、名称、市场。
3. 行业横向对比与排名
完整流水线:获取同行 → 批量抓取财报 → 计算指标 → 评分排名。
脚本: scripts/industry_comparison.py
使用方式:
# 默认对比10家同行
python scripts/industry_comparison.py 600519
# 对比20家,指定报告期
python scripts/industry_comparison.py SH600519 --limit 20 --date 2023-12-31
# 输出文本报告
python scripts/industry_comparison.py 600519 --format text
# 保存到文件
python scripts/industry_comparison.py 600519 -o report.json
python scripts/industry_comparison.py 600519 --format text -o report.txt
输出: 包含以下内容的 JSON / 文本报告:
- 目标公司信息与行业分类
- 各公司四维度财务指标明细
- 各维度归一化评分(0-100)
- 加权综合评分与排名
对比维度与评分
| 维度 | 指标 | 权重 | |------|------|------| | 盈利能力 | 毛利率、净利率、ROE、ROA | 30% | | 偿债能力 | 流动比率、速动比率、资产负债率 | 25% | | 运营效率 | 存货周转率、应收账款周转率、总资产周转率 | 20% | | 成长性 | 营收增长率、净利润增长率 | 25% |
评分方法:各指标在同行内做 min-max 归一化至 0-100 分,"越低越好"的指标(如资产负债率)反转分数,缺失数据按中性分 50 处理,加权汇总得综合分。
详细指标定义和行业基准见 references/financial_metrics.md。
工作流程
场景一:抓取单家公司财报
用户: "抓取贵州茅台的财报数据"
→ 运行 fetch_financial_data.py 600519
→ 输出 JSON 格式的三大报表+关键指标
场景二:获取同行业公司
用户: "白酒行业有哪些上市公司"
→ 运行 get_industry_peers.py 600519
→ 输出同行业公司列表
场景三:行业横向对比排名
用户: "对比白酒行业的上市公司并排名"
→ 运行 industry_comparison.py 600519 --limit 15
→ 输出量化对比表+综合排名
场景四:与 caibao-fenxi 协同深度分析
用户: "分析白酒行业,对比前5名的基本面"
→ Step 1: 运行 industry_comparison.py 获取排名
→ Step 2: 加载 caibao-fenxi 对 TOP 5 逐个做五维度分析
→ Step 3: 输出 排名表 + 五维度分析报告 + 陷阱识别
与 caibao-fenxi 的详细集成方式见 references/integration_guide.md。
脚本执行环境
- Python: 使用系统 Python 或 WorkBuddy 托管 Python (3.13+)
- 依赖: 仅使用标准库(urllib, json, argparse),无第三方依赖
- 路径: 脚本位于技能目录的
scripts/下,支持直接执行和模块导入
执行示例:
# 使用 WorkBuddy 托管 Python
python scripts/fetch_financial_data.py 600519
# 确保脚本能找到 utils 模块
cd ~/.workbuddy/skills/爬虫抓取 && python scripts/industry_comparison.py 600519
API 参考
本技能使用东方财富公开 JSON 接口,无需认证。详细的 API 端点、参数和字段说明见 references/api_endpoints.md。
与其他技能的协作
| 技能 | 角色 | 协作方式 | |------|------|---------| | caibao-fenxi | 五维度分析框架 | 本技能提供数据 → caibao-fenxi 深度分析 | | wb-finance-skill | 金融数据总入口 | 数据补充来源,本技能为批量场景优化 | | westock-data | 精确字段查询 | 单只股票的补充数据源 | | neodata-financial-search | 自然语言金融搜索 | 兜底数据源 |
红线
- 不编造数据: API 返回空值时标注"数据缺失",不填充默认值
- 不跨行业对比: 评分仅用于同行业横向对比,不同行业指标基准不同
- 不替代定性分析: 量化排名是筛选工具,不替代护城河、管理层等定性分析
- 尊重接口频率: 请求间隔 ≥ 0.3 秒,避免被封禁
- 投资建议需谨慎: 量化排名不构成投资建议,需结合 caibao-fenxi 的五维度分析
Scan to join WeChat group