설명 없음

zhangliang fc8c21b105 整体改为进程+协程运行模式 1 주 전
application fc8c21b105 整体改为进程+协程运行模式 1 주 전
configs 4715ef3c5e first commit 2 주 전
test fc8c21b105 整体改为进程+协程运行模式 1 주 전
utils fc8c21b105 整体改为进程+协程运行模式 1 주 전
.env.prod fc8c21b105 整体改为进程+协程运行模式 1 주 전
.env.test fc8c21b105 整体改为进程+协程运行模式 1 주 전
.gitignore 42e9e11fbd first commit 2 주 전
README.md 035a7eaab7 整体改为进程+协程运行模式 1 주 전
main.py fc8c21b105 整体改为进程+协程运行模式 1 주 전
run.sh fc8c21b105 整体改为进程+协程运行模式 1 주 전

README.md

AutoScraperX

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


🧠 项目结构简介

AutoScraperX/
├── main.py                           # 项目入口:监听 MQ 消息,调度 UniversalCrawler
├── spiders/
│   ├── 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. 启动项目

python main.py

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


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