2025-10-17 17:59:28 +08:00
2025-10-17 17:59:28 +08:00
2025-10-17 17:59:28 +08:00
2025-10-28 13:43:06 +08:00
2025-10-17 17:59:28 +08:00
2025-10-28 13:43:06 +08:00
2025-10-23 17:18:49 +08:00

情报收集系统设计

参考文档

https://alidocs.dingtalk.com/i/nodes/NZQYprEoWoexdo1ohPdxXvDbJ1waOeDk?utm_scene=team_space

程序框架(当前实现)

intelligence_system/
├── collectors/                            # 数据采集层
│   ├── complaint_spider.py               # 投诉信息爬虫(结构化入库/附件走MinIO)
│   ├── rss_subscriptions.py              # RSS 订阅抓取
│   └── internal/                         # 内部数据收集(保留)
│       └── jian_dao_cloud.py            # 简道云表单收集器(示例/占位)
│
├── processors/                            # 数据处理层
│   ├── processor_rss_data.py             # RSS数据清洗、分词、过滤与入库
│   ├── keywords.txt                      # 行业关键词(用于分词/过滤)
│   ├── stopwords.txt                     # 停用词
│   └── ai_engine/
│       └── ai_proessor_rss_data          # 预留(AI分析扩展占位)
│
├── services/                              # 应用服务层(保留)
│   ├── monitoring/                       # 舆情监控
│   │   ├── opinion_monitor.py            # 实时舆情追踪(占位)
│   │   └── brand_reputation.py           # 品牌口碑分析(占位)
│   ├── analysis/                         # 竞品分析
│   │   ├── competitor_tracker.py         # 竞品动态监控(占位)
│   │   └── swot_generator.py             # SWOT分析报告(占位)
│   ├── reporting/                        # 报告服务
│   │   ├── daily_reporter.py             # 自动化日报生成(占位)
│   │   └── weekly_digest.py              # 周报汇编系统(占位)
│   └── alert/                            # 预警服务
│       ├── alert_trigger.py              # 动态阈值告警(占位)
│       └── notification_center.py        # 邮件/短信通知(占位)
│
├── applications/                          # 应用层
│   ├── alert.py                          # 告警触发/通知(占位/实现中)
│   └── reporter/
│       ├── daily.py                      # 日报生成
│       └── monthly.py                    # 月报生成
│
├── system_management/                     # 系统管理层
│   ├── scheduler/
│   │   ├── task_scheduler.py             # 任务调度器(Cron表达式 + 线程池)
│   │   └── task_management.py            # 任务管理辅助
│   └── monitor/                          # 系统监控(目录占位)
│
├── utils/                                 # 工具库
│   ├── file_handler.py                   # 通用文件操作
│   ├── logger.py                         # 跨平台日志系统(Loguru
│   ├── mysql_agent.py                    # MySQL读写管理器
│   └── minio_agent.py                    # MinIO对象存储客户端
│
├── config.py                              # 配置加载与管理(含数据库/存储配置)
├── main.py                                # 系统入口(Cron轮询 + 调度执行)
└── requirements.txt                       # 依赖清单

程序设计原则

  1. 所有程序尽可能在py文件中运行,尽量避免使用命令行执行
  2. 配置需要在配置类中定义
  3. 密钥等信息直接放在配置类中
  4. 数据存储遵循"结构化存MySQL,非结构化存MinIO"原则,通过元数据关联

主程序与调度设计(已实现)

主程序以长运行进程方式启动,进入轻量轮询循环(每10秒)。调度器按Cron表达式在main_task表中拉取到期任务,使用线程池异步执行,并在每分钟输出运行状态、每小时汇总统计。

  • 调度器能力:

    • 基于croniter解析Cron表达式,支持时区(默认Asia/Shanghai
    • 线程池并发执行,信号量限制最大并发(与max_workers一致)
    • 任务入口动态解析:支持package.modulepackage.module.ClassName.mainpackage.module.func 等形式
    • 成功/失败后自动计算next_run_time或设置15分钟后重试
    • 关键字段自动更新:is_runninglast_run_timelast_run_statusrun_countnext_run_time
  • 主循环:

    • 每10秒检查一次待运行任务
    • 每分钟打印当前周期统计;每小时写入累计统计日志
    • 支持SIGINT/SIGTERM优雅关闭,等待正在运行的任务完成

日志设计(已实现)

跨平台日志系统(Loguru)输出至logs/目录:

  • application.log:主日志,rotation = 20MB,达到阈值后压缩为application.log.YYYYMMDD.zipretention = 30天
  • errors.log:错误日志(ERROR及以上),rotation = 10MBretention = 90天
  • 结构化扩展字段:日志支持extra键值对,自动美化并对长字段(如sqlparams)截断

建议记录的业务事件:

  • MySQL读写操作要点(表名、影响行数、事务状态)
  • MinIO对象操作(对象路径、大小、耗时、状态)
  • 任务执行上下文(task_id、task_name、module_path、耗时、状态)

存储系统设计(MinIO+MySQL

核心存储分工

存储类型 适用数据 核心作用
MySQL 结构化数据、元数据、关系型数据 存储业务逻辑数据、非结构化数据的索引信息、任务调度信息等
MinIO 非结构化数据 存储图片、视频、PDF文档、原始爬取文件等二进制/大文件数据

核心存储配置

  1. MySQL配置

    • 数据库名称:intelligence_system
    • 连接管理:通过utils/mysql_agent.py封装线程安全的连接池,提供结构化数据的增删改查及SQL执行能力
    • 适配特性:支持多平台(Windows/macOS/Linux)的超时配置和批处理优化
  2. MinIO配置

    • 存储桶命名规则:按数据类型划分,如collector-images(采集层图片)、processor-videos(处理层视频)
    • 连接管理:通过utils/minio_agent.py封装客户端,提供对象上传、下载、删除、查询URL等能力
    • 路径规则:{数据层}/{来源}/{时间戳}_{唯一ID}.{后缀}(例:collector/weibo_spider/20240520_12345.jpg

表命名规则(扩展)

  • 数据采集类:以collector_为前缀(存储采集到的结构化数据及MinIO对象元数据)
  • 数据处理类:以processor_为前缀(存储处理结果的结构化数据及MinIO处理后对象的元数据)
  • 数据存储类:以storage_为前缀(存储MinIO对象的索引信息,如哈希、大小、访问权限等)
  • 应用层类:以application_为前缀(对应业务应用数据)
  • 系统类:如任务调度表等采用功能命名(如main_task

核心表结构(当前落地)

  1. main_task:任务调度表(task_nametask_typemodule_pathcron_expressiontime_zonerun_countis_runninglast_run_timelast_run_statusnext_run_timeis_active 等)
  2. collector_rss_subscriptionsRSS源采集数据(文章标题文章摘要发布时间来源URL文章链接是否已处理 等)
  3. processed_rss_dataRSS处理结果(分词结果是否汽车相关处理时间 等)
  4. collector_complaint_spider:投诉信息爬虫数据(含文本与附件MinIO路径attachment_minio_path等)
  5. 可选:storage_object_index(建议用于统一索引MinIO对象元数据)

数据采集设计

  1. 结构化数据(RSS、投诉文本):写入collector_前缀表
  2. 非结构化数据(附件/图片等):
    • 使用utils/minio_agent.py上传至对应存储桶
    • 将对象路径与元数据写入业务表或storage_object_index
  3. 采集模块需同时处理MySQL与MinIO交互,确保关联完整

数据处理设计(RSS流程已实现)

processors/processor_rss_data.py流程:

  • collector_rss_subscriptions加载未处理数据(可配置limit
  • 加载停用词与行业关键词(stopwords.txt / keywords.txt),并动态注入jieba词典
  • 标注词性并过滤停用词,仅保留与汽车后市场相关的词汇
  • 标记与过滤:出现任一行业关键词即视为相关,进入保存
  • 将结果写入processed_rss_data,并回写源表是否已处理 = 1
  • 输出处理统计(总量、命中量、命中率、时间)

依赖与运行

  • 依赖:见requirements.txtpandas、SQLAlchemy、PyMySQL、croniter、pytz、loguru、jieba、feedparser、beautifulsoup4、minio 等)
  • 配置:在config.py中设置MYSQL_CONFIG与MinIO参数
  • 运行:
    • 启动主程序:python main.py
    • 添加任务:向main_task插入记录,module_path可指向如processors.processor_rss_data.main
S
Description
No description provided
Readme 7.3 MiB
Languages
Python 83.9%
Jupyter Notebook 16.1%