# 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 - 失败或超时不会阻塞其他任务