Files
brunoandClaude Sonnet 4.5 c553009853 feat: 添加全量A股数据抓取系统 v2.1.0
新增功能:
- 5个专业数据抓取器(公司信息、板块、财务、资金流、龙虎榜)
- 一键执行脚本 run_all_fetchers.sh(完整/测试/自定义三种模式)
- 扩展数据库Schema(11张新表)
- 数据源迁移至免费API(东方财富、新浪、腾讯)

数据能力:
- 公司基础信息:5,295只A股
- 板块数据:~400个板块 + 20万成分股关系
- 财务报表:利润表+资产负债表(最近4季)
- 资金流:主力资金、大单、中单、小单(700天)
- 龙虎榜:上榜记录+营业部明细(2年)
- 总数据量:~395万条记录,3-5GB存储

技术亮点:
- 断点续传支持
- UPSERT策略避免重复
- API限流控制
- 实时进度显示
- 错误容错机制
- 完整日志记录

文档更新:
- README添加"全量数据抓取"章节
- 60+页技术方案文档
- 完整的使用指南和维护文档

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 08:35:43 +08:00

6.1 KiB
Raw Permalink Blame History

Phase 1 实施状态报告

✅ 已完成项目

1. 数据库Schema扩展

  • ✅ 安装成功
  • ✅ 11个新表已创建
  • ✅ 索引和触发器已配置
# 验证
psql -U stock_user -d stock_db -c "\dt t_*"

2. 公司基础信息抓取器

  • ✅ fetch_company_info_v2.py 已创建并测试
  • ✅ 成功率: 90%+
  • ✅ 支持断点续传
  • ✅ 支持批量抓取

测试结果:

📋 数据库中共有 5295 只股票
✅ 测试成功: 9/10
❌ 失败: 1/10 (已修复)

立即可用:

# 测试模式(10只股票)
python fetch_company_info_v2.py --test

# 抓取全部5295只
python fetch_company_info_v2.py

# 抓取前100只
python fetch_company_info_v2.py --limit 100

预计耗时: 5,295只 × 0.3秒 ≈ 30分钟

⏳ 待实现项目

3. 板块数据抓取器 (fetch_sector_data.py)

优先级: P1 复杂度: 中等 预计耗时: 1-2小时实现,10分钟运行

数据量:

  • 行业板块: ~100个
  • 概念板块: ~300个
  • 成分股关系: ~20万条

API端点:

# 行业板块列表
url = "http://80.push2.eastmoney.com/api/qt/clist/get"
params = {'fs': 'm:90+t:2', 'pz': 5000}

# 概念板块列表
params = {'fs': 'm:90+t:3', 'pz': 5000}

# 板块成分股
url = "http://push2.eastmoney.com/api/qt/slist/get"
params = {'spt': 3, 'code': 'BK0001'}

4. 财务报表抓取器 (fetch_financial_data.py)

优先级: P1 复杂度: 较高 预计耗时: 2-3小时实现,1-2小时运行

数据量:

  • 最近4季 × 5,295只 ≈ 21,180条
  • 利润表 + 资产负债表 + 现金流量表

API端点:

url = "http://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/ZBPageAjax"
params = {
    'code': 'SH600000',
    'type': 1,  # 1=按报告期,2=按年度
}

5. 资金流数据抓取器 (fetch_money_flow.py)

优先级: P2 复杂度: 中等 预计耗时: 1-2小时实现,4-6小时运行

数据量:

  • 5,295只 × 700天 ≈ 370万条

API端点:

url = "http://push2.eastmoney.com/api/qt/stock/fflow/kline/get"
params = {
    'lmt': 700,
    'klt': 1,  # 日线
    'secid': '1.600000',
    'fields1': 'f1,f2,f3,f7',
    'fields2': 'f51,f52,f53,f54,f55,f56'
}

6. 龙虎榜数据抓取器 (fetch_top_list.py)

优先级: P2 复杂度: 中等 预计耗时: 1-2小时实现,30分钟运行

数据量:

  • 历史龙虎榜记录: ~5万条
  • 营业部明细: ~20万条

API端点:

url = "http://datacenter-web.eastmoney.com/api/data/v1/get"
params = {
    'reportName': 'RPT_DAILYBILLBOARD_DETAILS',
    'columns': 'ALL',
    'pageNumber': 1,
    'pageSize': 500
}

📊 Phase 1 完成度

任务 状态 完成度
数据库Schema ✅ 完成 100%
公司信息抓取 ✅ 完成 100%
板块数据抓取 ⏳ 待实现 0%
财务报表抓取 ⏳ 待实现 0%
资金流抓取 ⏳ 待实现 0%
龙虎榜抓取 ⏳ 待实现 0%
总体进度 进行中 33%

🎯 建议执行顺序

Option A: 逐步实施(推荐)

适合: 稳妥推进,及时验证

# Step 1: 先抓取公司信息(30分钟)
python fetch_company_info_v2.py

# Step 2: 验证数据
psql -U stock_user -d stock_db -c "
SELECT COUNT(*),
       COUNT(DISTINCT industry_sw_l1) as industries,
       COUNT(DISTINCT list_board) as boards
FROM t_company_info;
"

# Step 3: 继续实现板块抓取器
# (我可以帮您实现)

# Step 4: 验证+实现下一个
# ...循环直到完成

Option B: 批量实施

适合: 快速完成全部功能

# 我一次性为您创建全部5个抓取器
# 然后您可以并行或串行运行

python fetch_company_info_v2.py &
python fetch_sector_data.py &
python fetch_financial_data.py &
# ...

Option C: 延迟实施

适合: 专注于当前最重要的数据

# 只实现P1优先级的抓取器
1. 公司信息 ✅
2. 板块数据 ⏳
3. 财务报表 ⏳

# P2数据(资金流、龙虎榜)延后实施

💡 立即行动

1. 运行公司信息抓取(推荐)

cd /Users/brunogao/work/codes/shenye/examples/claude-stock/backend
source .venv/bin/activate

# 后台运行(预计30分钟)
nohup python fetch_company_info_v2.py > fetch_company_$(date +%Y%m%d_%H%M%S).log 2>&1 &

# 监控进度
tail -f fetch_company_*.log

# 或者前台运行(可以看到实时进度)
python fetch_company_info_v2.py

2. 验证数据质量

# 抓取完成后验证
psql -U stock_user -d stock_db << 'SQL'
-- 总体统计
SELECT
    COUNT(*) as total,
    COUNT(DISTINCT industry_sw_l1) as industries,
    COUNT(DISTINCT exchange) as exchanges,
    COUNT(DISTINCT list_board) as boards,
    COUNT(full_name) as has_name,
    COUNT(website) as has_website
FROM t_company_info;

-- 行业分布
SELECT
    industry_sw_l1,
    COUNT(*) as count
FROM t_company_info
WHERE industry_sw_l1 IS NOT NULL AND industry_sw_l1 != ''
GROUP BY industry_sw_l1
ORDER BY count DESC
LIMIT 10;

-- 交易所分布
SELECT
    exchange,
    list_board,
    COUNT(*) as count
FROM t_company_info
GROUP BY exchange, list_board
ORDER BY count DESC;
SQL

3. 请求下一步实施

选择一个选项告诉我:

A. 继续实现全部抓取器 - "请实现剩余4个抓取器"

B. 先实现高优先级 - "先实现板块和财务抓取器"

C. 我自己来 - "我会根据框架自己实现"

D. 暂停,先测试 - "我先运行公司信息抓取,测试后再决定"

📁 相关文件

  • ✅ database/schema_extended.sql - 扩展数据库Schema
  • ✅ fetch_company_info_v2.py - 公司信息抓取器(可用)
  • ⏳ fetch_sector_data.py - 板块抓取器(待创建)
  • ⏳ fetch_financial_data.py - 财报抓取器(待创建)
  • ⏳ fetch_money_flow.py - 资金流抓取器(待创建)
  • ⏳ fetch_top_list.py - 龙虎榜抓取器(待创建)
  • 📖 COMPREHENSIVE_DATA_PLAN.md - 完整技术方案
  • 📖 QUICK_START_COMPREHENSIVE_DATA.md - 快速启动指南

状态: Phase 1 进行中(33%完成) 下一步: 运行公司信息抓取 + 决定后续实施方案 预计完成时间: 根据选择的方案,1-7天