Files

4.0 KiB

懂球帝数据爬虫

专门用于采集懂球帝(dongqiudi.com)足球数据的高级爬虫框架,内置多层反爬绕过机制。

功能特性

  • 混合爬取引擎: API 请求 → TLS 指纹伪装 → Playwright 浏览器自动化,三级降级
  • TLS 指纹伪装: 基于 curl_cffi 模拟 Chrome/Edge 真实 JA3 指纹,绕过 TLS 检测
  • 浏览器指纹池: 50+ 指纹轮换,含 UA、Canvas、WebGL、屏幕分辨率等完整指纹
  • Playwright 隐身模式: 移除 webdriver 痕迹、模拟人类鼠标/滚动行为
  • 代理管理: 代理池健康检测、自动轮换、按成功率排序
  • 智能调度: 高斯分布随机延迟、频率控制、自动退避重试
  • 数据持久化: MySQL 异步存储,UPSERT 避免重复

数据采集范围

数据类型 API 端点 说明
积分榜 /soccer/biz/data/standing 联赛积分排名
赛程 /soccer/biz/data/schedule 比赛日程与比分
比赛详情 /soccer/biz/data/match_detail 事件、阵容、统计
比赛菜单 /api/v2/config/match_menu 联赛/赛事分类
实时比赛 /soccer/biz/data/live 进行中的比赛
新闻资讯 /api/v2/article/list 体育新闻列表

支持联赛

中超、中甲、亚冠、英超、西甲、德甲、意甲、法甲(可在配置文件中扩展)

安装

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

# 安装 Playwright 浏览器(用于 Playwright 通道)
playwright install chromium

使用方法

# 测试连通性
python main.py test

# 初始化数据库表
python main.py init-db

# 采集所有联赛积分榜
python main.py standings

# 采集所有联赛赛程
python main.py schedule

# 采集积分榜 + 赛程
python main.py all

# 采集比赛类型菜单
python main.py menu

# 采集单个联赛 (通过 season_id)
python main.py single 26322

# 启动定时调度
python main.py cron

项目结构

docker/crawler/
├── config/
│   └── settings.yaml          # 配置文件
├── src/
│   ├── core/                  # 核心模块
│   │   ├── config.py          # 配置加载
│   │   ├── logger.py          # 日志
│   │   └── exceptions.py      # 异常定义
│   ├── anti_detect/           # 反检测模块
│   │   ├── fingerprint.py     # 浏览器指纹生成与管理
│   │   ├── tls_client.py      # TLS 指纹伪装 (curl_cffi)
│   │   ├── proxy_manager.py   # 代理池管理
│   │   └── stealth_browser.py # Playwright 隐身浏览器
│   ├── engine/                # 爬虫引擎
│   │   ├── api_client.py      # aiohttp API 客户端
│   │   └── hybrid_engine.py   # 混合引擎 (API+TLS+Playwright)
│   ├── parser/                # 数据解析
│   │   └── data_parser.py     # 懂球帝数据解析器
│   ├── storage/               # 数据存储
│   │   └── database.py        # MySQL 异步存储
│   └── scheduler/             # 调度器
│       ├── task_runner.py     # 任务运行器
│       └── cron_scheduler.py  # 定时调度
├── main.py                    # 主入口
├── requirements.txt           # Python 依赖
└── README.md

反爬策略说明

1. TLS 指纹伪装

懂球帝可能通过 JA3/JA4 指纹识别爬虫。curl_cffi 能完整模拟 Chrome 的 TLS 握手过程。

2. 浏览器指纹轮换

每次请求使用不同的 User-Agent、Sec-Ch-Ua 等头部,避免被指纹追踪。

3. 请求频率控制

高斯分布随机延迟(2-8秒),避免固定间隔被识别为机器人。

4. Playwright 降级

当 API 直接请求被拦截时,自动降级到 Playwright 浏览器渲染,绕过 JS 挑战。

配置说明

编辑 config/settings.yaml 可自定义:

  • 爬取模式: api_only / playwright_only / hybrid / smart
  • 延迟策略、重试次数、并发数
  • 代理设置
  • 目标联赛列表
  • 数据库和 Redis 连接信息