121 lines
4.0 KiB
Markdown
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
|
|
```
|
|
|
|
## 项目结构
|
|
|
|
```
|
|
dongqiudi-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 连接信息
|