Skip to content

riching/stock_scraper

Repository files navigation

股票数据爬虫系统

一个基于多线程生产者-消费者架构的高性能股票数据爬虫系统,支持6个主流数据源的实时和历史数据采集。

🌟 核心特性

多线程生产者-消费者架构

  • 6个消费者线程并发运行,大幅提升爬取效率
  • 线程安全的统计信息管理
  • 队列任务分配机制,确保负载均衡
  • 优雅的线程生命周期管理和错误处理

多数据源支持

  • 新浪财经:支持历史数据爬取,覆盖A股市场
  • 腾讯财经:支持实时和历史数据,数据更新及时
  • 东方财富:支持实时数据,数据质量高
  • Akshare:高质量金融数据接口
  • Baostock:专业金融数据平台
  • Yahoo Finance:国际数据源,支持全球市场

数据处理能力

  • 实时数据和历史数据双模式支持
  • 数据验证和对比功能
  • 自动去重和数据清洗
  • 技术指标计算(MA、RSI等)
  • 情感分析和LLM智能分析

📁 项目结构

stock_scraper/
├── crawler/                    # 爬虫模块
│   ├── multi_source_crawler.py         # 多线程实时数据爬虫
│   ├── multi_source_history_crawler.py  # 多线程历史数据爬虫
│   ├── sina/                          # 新浪财经爬虫
│   ├── tencent/                       # 腾讯财经爬虫
│   ├── eastmoney/                     # 东方财富爬虫
│   ├── baostock/                      # Baostock爬虫
│   └── yahoo_finance/                 # Yahoo Finance爬虫
├── utils/                      # 工具模块
│   ├── stock_database.py              # 数据库操作
│   ├── akshare_data.py               # Akshare数据接口
│   ├── data_saver.py                 # 数据保存
│   ├── deduplication.py              # 数据去重
│   ├── sentiment_calculator.py        # 情感分析
│   └── llm_analyzer.py              # LLM分析
├── app/                        # Web应用
│   ├── main.py                       # Flask应用主程序
│   ├── models/                       # 数据模型
│   ├── templates/                    # HTML模板
│   └── static/                      # 静态资源
├── config/                     # 配置文件
│   └── settings.py                  # 配置管理
├── requirements.txt            # Python依赖
└── README.md                  # 项目说明

🚀 快速开始

环境要求

  • Python 3.8+
  • SQLite 3
  • 依赖库:见 requirements.txt

安装依赖

pip install -r requirements.txt

配置数据库

编辑 config/settings.py,配置数据库路径:

DATABASE_PATH = "/path/to/your/database.db"

运行爬虫

实时数据爬取(测试模式)

python crawler/multi_source_crawler.py

历史数据爬取

python crawler/multi_source_history_crawler.py

启动Web应用

python app/main.py

访问 http://localhost:5000

📊 数据库Schema

详细的数据库表结构请参考 DATABASE_SCHEMA.md

主要数据表

  • stock_list: 股票列表
  • merged_stocks: 合并的股票数据
  • data_status: 数据状态跟踪
  • stock_news: 股票新闻
  • stock_announcements: 公告信息
  • stock_comments: 评论数据
  • analyst_reports: 分析师报告
  • stock_sentiment_scores: 情感评分
  • stock_classifications: 股票分类

🔧 配置说明

爬虫配置

# 最大调用次数限制
MAX_CALLS = 5000

# 测试模式
TEST_MODE = True

# 目标日期
TARGET_DATE = "2026-02-13"

数据源配置

每个数据源都有独立的配置选项,可以在对应的爬虫文件中修改。

📈 性能特点

  • 并发处理:6个线程同时工作,大幅提升效率
  • 智能重试:失败自动重试机制
  • 数据验证:多维度数据质量检查
  • 内存优化:流式处理,避免内存溢出
  • 错误恢复:完善的异常处理和日志记录

🛠️ 开发指南

添加新的数据源

  1. crawler/ 下创建新的数据源目录
  2. 实现爬虫类,继承 BaseWorker
  3. multi_source_crawler.py 中注册新的Worker
  4. 测试数据质量和性能

自定义数据处理

修改 utils/ 下的工具类,实现自定义的数据处理逻辑。

📝 使用示例

爬取指定股票数据

from crawler.multi_source_crawler import MultiSourceRealTimeCrawler

crawler = MultiSourceRealTimeCrawler(
    db_path="/path/to/database.db",
    test_mode=False
)

# 爬取指定股票
stocks = ["000001", "600519", "000858"]
stats = crawler.crawl(stocks, "2026-02-13")

print(f"成功: {stats['success']}, 失败: {stats['failure']}")

查询数据库

from utils.stock_database import StockDatabase

with StockDatabase("/path/to/database.db") as db:
    # 获取股票数据
    data = db.get_stock_data("000001", "2026-02-13")
    print(data)
    
    # 获取所有股票代码
    codes = db.get_all_stock_codes()
    print(f"共有 {len(codes)} 只股票")

🤝 贡献指南

欢迎提交Issue和Pull Request!

📄 License

MIT License

📞 联系方式

🙏 致谢

感谢所有开源数据源和工具的支持!


注意:本系统仅用于学习和研究目的,请遵守相关数据源的使用条款和法律法规。

About

- 多线程股票数据爬虫系统 - 支持6个数据源的生产者-消费者架构 -

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors