|
@@ -1,19 +1,107 @@
|
|
|
-整体流程:
|
|
|
-MQ 消息推送
|
|
|
- ↓
|
|
|
-main.py 消费并生成线程
|
|
|
- ↓
|
|
|
-handle_message() → 解析消息体(platform + mode)
|
|
|
- ↓
|
|
|
-加载 user_list / rule_dict(数据库)
|
|
|
- ↓
|
|
|
-执行 UniversalCrawler.run()
|
|
|
- ↓
|
|
|
-1. 读取配置
|
|
|
-2. 请求视频接口
|
|
|
-3. 解析视频数据(字段映射)
|
|
|
-4. 构造 VideoItem
|
|
|
-5. 推送到 ETL MQ
|
|
|
- ↓
|
|
|
-全部成功 → ack 消息
|
|
|
-失败 → 不 ack,MQ 自动重试
|
|
|
+
|
|
|
+# AutoScraperX
|
|
|
+
|
|
|
+一个基于 YAML 配置驱动的通用分布式爬虫系统,支持多 Topic 并发消费,按平台灵活执行爬虫逻辑,最终推送至 ETL 消费系统。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 🧠 项目结构简介
|
|
|
+
|
|
|
+```bash
|
|
|
+AutoScraperX/
|
|
|
+├── main.py # 项目入口:监听 MQ 消息,调度 UniversalCrawler
|
|
|
+├── crawler_worker/
|
|
|
+│ ├── universal_crawler.py # 通用爬虫主类,读取配置并执行爬虫逻辑
|
|
|
+│ └── rabbitmq_consumer.py # 多线程消费 MQ 中的消息并执行任务
|
|
|
+├── configs/
|
|
|
+│ ├── spiders_config.yaml # 各平台爬虫规则配置文件(含 JsonPath)
|
|
|
+│ └── topic_map.yaml # topic 与平台名映射关系配置
|
|
|
+├── application/
|
|
|
+│ ├── common/ # 各种工具模块(日志、GPT、FFmpeg、代理池、Feishu 等)
|
|
|
+│ ├── config/ # 全局配置
|
|
|
+│ ├── mysql/redis/ # 数据库与缓存工具模块
|
|
|
+│ ├── messageQueue/ # MQ 消费/ACK 工具模块
|
|
|
+│ ├── functions/ # 各类通用工具函数与日志记录
|
|
|
+│ ├── items/ # 爬取的数据结构定义
|
|
|
+│ └── pipeline/ # 数据处理与入库管道
|
|
|
+├── scheduler/
|
|
|
+│ └── scheduler_main.py # 预留任务调度扩展入口(支持定时任务)
|
|
|
+├── utils/
|
|
|
+│ ├── config_loader.py # YAML 配置加载工具
|
|
|
+│ └── project_paths.py # 自动定位 config、log 路径等
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 🚀 功能特性
|
|
|
+
|
|
|
+- ✅ 多 Topic 单进程并发监听消费(使用线程+异步)
|
|
|
+- ✅ 根据消息动态获取 platform/mode,并注入 user_list、rule_dict
|
|
|
+- ✅ YAML 驱动爬虫逻辑,无需重复开发代码
|
|
|
+- ✅ 请求支持自动重试、动态分页、字段抽取
|
|
|
+- ✅ 视频封装为标准 `VideoItem`,统一推送到 MQ
|
|
|
+- ✅ 任务执行成功后再确认 ACK,保证一致性
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 🧱 架构概览
|
|
|
+
|
|
|
+- **main.py**:监听多个 Topic,消费 MQ 消息,解析出平台并调度 `UniversalCrawler`
|
|
|
+- **UniversalCrawler**:核心爬虫逻辑,读取配置发送请求,抽取字段,封装数据项,交由 `pipeline` 处理
|
|
|
+- **PiaoQuanPipeline**:负责数据 ETL 入库、推送到 ETL MQ
|
|
|
+- **MQ 系统**:阿里云 MQ,支持按平台配置多个 Topic,消费完成再手动 ACK
|
|
|
+- **配置文件**:
|
|
|
+ - `spiders_config.yaml`:各平台请求方式、字段映射、分页等配置
|
|
|
+ - `topic_map.yaml`:多 Topic 映射(暂不再使用 platform 字段)
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 🛠 使用说明
|
|
|
+
|
|
|
+### 1. 启动项目
|
|
|
+
|
|
|
+```bash
|
|
|
+python main.py
|
|
|
+```
|
|
|
+
|
|
|
+> 程序将自动监听所有 Topic,消费消息后创建对应的爬虫任务并执行。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 🧩 spiders_config.yaml 示例配置
|
|
|
+
|
|
|
+```yaml
|
|
|
+default:
|
|
|
+ base_url: http://api.xxx.com
|
|
|
+ request_timeout: 30[]()
|
|
|
+ headers:
|
|
|
+ {"Content-Type": "application/json"}
|
|
|
+
|
|
|
+benshanzhufu:
|
|
|
+ mode: recommend
|
|
|
+ path: /crawler/ben_shan_zhu_fu/recommend
|
|
|
+ method: post
|
|
|
+ request_body:
|
|
|
+ cursor: "1"
|
|
|
+ paging: true
|
|
|
+ max_pages: 5
|
|
|
+ etl_hook: "process_video_obj"
|
|
|
+ response_parse:
|
|
|
+ next_cursor: "$.data.next_cursor"
|
|
|
+ data_path: "$.data.data"
|
|
|
+ fields:
|
|
|
+ video_id: "$.nid"
|
|
|
+ video_title: "$.title"
|
|
|
+ play_cnt: 0
|
|
|
+ publish_time: "$.update_time"
|
|
|
+ video_url: "$.video_url"
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 🧵 线程调度与消费机制
|
|
|
+
|
|
|
+- 每个 topic 启一个线程进行 MQ 消费
|
|
|
+- 每条消息创建一个 UniversalCrawler 实例,执行 `.run()`,完成后再 ACK
|
|
|
+- 失败或超时不会阻塞其他任务
|
|
|
+
|