|
6 일 전 | |
---|---|---|
config | 6 일 전 | |
core | 6 일 전 | |
scheduler | 1 개월 전 | |
scripts | 6 일 전 | |
services | 6 일 전 | |
spiders | 6 일 전 | |
tests | 1 개월 전 | |
.env | 1 개월 전 | |
.gitignore | 1 개월 전 | |
CONFIGURATION.md | 6 일 전 | |
README.md | 6 일 전 | |
deploy.sh | 1 주 전 | |
main.py | 1 개월 전 | |
requirements.txt | 1 개월 전 | |
run.sh | 1 개월 전 |
一个基于 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 模型对配置进行验证,确保配置格式正确:
运行以下命令检查配置健康状态:
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()
python main.py
程序将自动监听所有 Topic,消费消息后创建对应的爬虫任务并执行。
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"
.run()
,完成后再 ACK运行测试:
# 运行所有测试
pytest
# 运行特定测试
pytest tests/test_config.py
# 安装依赖
pip install -r requirements.txt
# 启动服务
python main.py
# 或使用部署脚本
sh deploy.sh
查看所有平台配置:
python scripts/config_cli.py list
bash
python scripts/config_cli.py show <platform_name>
检查配置健康状态:
python scripts/config_cli.py check
bash
python scripts/config_cli.py docs
查看配置统计信息:
python scripts/config_cli.py stats
当需要更新配置时:
config/spiders_config.yaml
文件通过命令行工具重新加载配置:
# 在代码中调用重新加载
from core.utils.spider_config import SpiderConfig
SpiderConfig.reload_config()
检查系统健康状态:
python -m core.utils.config_health_check
bash
python -m core.utils.config_documentation