Tidak Ada Deskripsi

zhangliang 3b8f6f91f2 小年糕账号 10 bulan lalu
config 7598c2aff2 小年糕账号 10 bulan lalu
core 3b8f6f91f2 小年糕账号 10 bulan lalu
scheduler 4341158f7a 修复任务id获取 11 bulan lalu
scripts 7598c2aff2 小年糕账号 10 bulan lalu
services 3b8f6f91f2 小年糕账号 10 bulan lalu
spiders ebacf7cc5b 小年糕账号 10 bulan lalu
tests 85590ce087 优化消息处理逻辑 11 bulan lalu
.env 85590ce087 优化消息处理逻辑 11 bulan lalu
.gitignore 3822dc89a8 更新 11 bulan lalu
CONFIGURATION.md 7598c2aff2 小年糕账号 10 bulan lalu
README.md 7598c2aff2 小年糕账号 10 bulan lalu
deploy.sh 0203b2f34f 增加小年糕账号 10 bulan lalu
main.py 15f1b4e2d8 bug修复 11 bulan lalu
requirements.txt 85590ce087 优化消息处理逻辑 11 bulan lalu
run.sh fc8c21b105 整体改为进程+协程运行模式 1 tahun lalu

README.md

AutoScraperX

一个基于 YAML 配置驱动的通用分布式爬虫系统,支持多 Topic 并发消费,按平台灵活执行爬虫逻辑,最终推送至 ETL 消费系统。


🧠 项目结构简介

├── config/                # 配置文件
│   ├── __init__.py        # 配置初始化
│   ├── base.py            # 环境配置定义
│   └── spiders_config.yaml# 爬虫平台配置
├── core/                  # 核心框架模块
│   ├── base/              # 基础组件(异步客户端等)
│   ├── models/            # 数据模型
│   ├── utils/             # 工具类
│   │   ├── config_manager.py      # 统一配置管理器
│   │   ├── config_health_check.py # 配置健康检查
│   │   ├── config_documentation.py# 配置文档生成
│   │   └── spider_config.py       # 爬虫配置加载
│   └── __init__.py
├── spiders/               # 业务爬虫实现
│   ├── basespider.py      # 爬虫基类
│   ├── recommendspider.py # 推荐模式爬虫基类
│   ├── authorspider.py    # 账号模式爬虫基类
│   └── spider_registry.py # 爬虫注册中心
├── services/              # 业务服务
│   ├── pipeline.py        # 数据处理管道
│   └── async_mysql_service.py # 数据库服务
├── scheduler/             # 调度器
│   ├── process_manager.py # 进程管理
│   └── async_consumer.py  # 异步消费者
├── tests/                 # 测试用例
└── scripts/               # 运维脚本
    └── config_cli.py      # 配置管理命令行工具

## 🚀 功能特性

- ✅ 多 Topic 单进程并发监听消费(使用线程)
- ✅ 根据消息动态获取 platform/mode,并注入 user_list、rule_dict
- ✅ YAML 驱动爬虫逻辑,无需重复开发代码
- ✅ 请求支持自动重试、动态分页、字段抽取
- ✅ 视频封装为标准 `VideoItem`,统一推送到 MQ
- ✅ 任务执行成功后再确认 ACK,保证一致性
- ✅ 完善的配置管理(验证、健康检查、文档生成、命令行工具)

---

## 🧱 架构概览

- **main.py**:监听多个 Topic,消费 MQ 消息,解析出平台并调度爬虫
- **爬虫类**:核心爬虫逻辑,读取配置发送请求,抽取字段,封装数据项
- **Pipeline**:负责数据校验、去重和推送至 ETL MQ
- **MQ 系统**:阿里云 MQ,支持按平台配置多个 Topic,消费完成再手动 ACK
- **配置系统**:
  - 环境配置:通过 `.env` 文件和 `config/base.py` 管理
  - 爬虫配置:通过 `config/spiders_config.yaml` 管理

---

## ⚙️ 配置管理

AutoScraperX 使用分层配置管理系统,提供完整的配置管理功能:

### 环境配置

环境配置通过 `.env` 文件管理,包含数据库、消息队列、日志等基础设施配置。

1. 复制 `.env.example` 为 `.env`
2. 根据实际环境填写配置项

```bash
cp .env.example .env
# 编辑 .env 文件

爬虫配置

爬虫配置通过 config/spiders_config.yaml 文件管理,采用 YAML 格式,支持默认配置和平台特定配置。

# 默认配置
default:
  base_url: http://api.example.com
  request_timeout: 30
  max_retries: 3

# 平台特定配置
platform_name:
  platform: platform_name
  mode: recommend
  path: /api/path
  method: post
  # 更多配置...

配置验证

系统使用 Pydantic 模型对配置进行验证,确保配置格式正确:

  • HTTP方法必须是有效的(GET, POST, PUT, DELETE, PATCH)
  • 循环次数必须是正数
  • 循环间隔配置必须包含min和max,且min不能大于max
  • 响应解析配置必须包含data_path字段

配置健康检查

运行以下命令检查配置健康状态:

python -m core.utils.config_health_check

该工具会检查:

  • 环境配置完整性
  • 爬虫配置有效性
  • 配置文件权限

配置文档生成

运行以下命令生成配置文档:

python -m core.utils.config_documentation

生成的文档包含:

  • 环境配置详细说明
  • 爬虫配置结构说明
  • 当前配置状态信息

配置命令行工具

使用命令行工具管理配置:

# 检查配置健康状态
python scripts/config_cli.py check

# 生成配置文档
python scripts/config_cli.py docs

# 列出所有平台
python scripts/config_cli.py list

# 显示配置统计信息
python scripts/config_cli.py stats

# 显示特定平台配置详情
python scripts/config_cli.py show <platform_name>

配置热更新

当修改了配置文件后,可以通过以下方式重新加载配置而无需重启服务:

# 通过API重新加载配置(如果启用了配置API服务)
curl -X POST http://127.0.0.1:8080/config/reload

# 或者在代码中调用
from core.utils.spider_config import SpiderConfig
SpiderConfig.reload_config()

🛠 使用说明

1. 启动项目

python main.py

程序将自动监听所有 Topic,消费消息后创建对应的爬虫任务并执行。


🧩 spiders_config.yaml 示例配置

default:
  base_url: http://8.217.192.46:8889
  request_timeout: 30
  headers:
    {"Content-Type": "application/json"}

benshanzhufu:
  platform: benshanzhufu
  mode: recommend
  path: /crawler/ben_shan_zhu_fu/recommend
  method: post
  request_body:
    cursor: "{{next_cursor}}"
  loop_times: 50
  loop_interval:
    min: 30
    max: 60
  feishu_sheetid: "aTSJH4"
  response_parse:
    data: "$.data"
    next_cursor: "$.data.next_cursor"
    data_path: "$.data.data"
    fields:
      video_id: "$.nid"
      video_title: "$.title"
      play_cnt: 0
      publish_time_stamp: "$.update_time"
      out_user_id: "$.nid"
      cover_url: "$.video_cover"
      like_cnt: 0
      video_url: "$.video_url"
      out_video_id: "$.nid"

🧵 线程调度与消费机制

  • 每个 topic 启一个线程进行 MQ 消费
  • 每条消息创建一个爬虫实例,执行 .run(),完成后再 ACK
  • 失败或超时不会阻塞其他任务

🧪 测试

运行测试:

# 运行所有测试
pytest

# 运行特定测试
pytest tests/test_config.py

📦 部署

# 安装依赖
pip install -r requirements.txt

# 启动服务
python main.py

# 或使用部署脚本
sh deploy.sh

🧰 常用操作

配置管理操作

  1. 查看所有平台配置

    python scripts/config_cli.py list
    
    1. 查看特定平台配置详情bash python scripts/config_cli.py show <platform_name>
  2. 检查配置健康状态

    python scripts/config_cli.py check
    
    1. 生成配置文档bash python scripts/config_cli.py docs
  3. 查看配置统计信息

    python scripts/config_cli.py stats
    

    配置更新操作

    当需要更新配置时:

    1. 编辑 config/spiders_config.yaml 文件
    2. 通过命令行工具重新加载配置:

      # 在代码中调用重新加载
      from core.utils.spider_config import SpiderConfig
      SpiderConfig.reload_config()
      

日常维护操作

  1. 检查系统健康状态

    python -m core.utils.config_health_check
    
    1. 生成最新的配置文档bash python -m core.utils.config_documentation