Files
sbnews/docker/crawler/README.md
T

121 lines
4.0 KiB
Markdown

# 懂球帝数据爬虫
专门用于采集懂球帝(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` | 体育新闻列表 |
## 支持联赛
中超、中甲、亚冠、英超、西甲、德甲、意甲、法甲(可在配置文件中扩展)
## 安装
```bash
# 安装 Python 依赖
pip install -r requirements.txt
# 安装 Playwright 浏览器(用于 Playwright 通道)
playwright install chromium
```
## 使用方法
```bash
# 测试连通性
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 连接信息