4.0 KiB
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 连接信息