Files
baijiahao_data_crawl/README.md

397 lines
11 KiB
Markdown
Raw Normal View History

# 百家号数据采集与分析系统
## 项目简介
本项目是一个面向百家号平台的自动化数据采集、分析与监控系统,支持多账号管理、定时数据同步、数据验证和短信告警等功能。
## 核心功能
### 1. 数据采集
- **Cookie管理**通过mitmproxy自动捕获账号Cookie支持批量同步至数据库
- **文章抓取**:抓取百家号文章数据,包括标题、内容、发布时间等
- **统计数据获取**:获取发文统计(曝光量、阅读量、点击率)和收入数据
### 2. 数据分析
- **多维度统计**:按日/周/月维度生成统计报表
- **环比计算**:自动计算周环比、月环比增长率
- **数据导出**支持导出为CSV格式便于数据分析
### 3. 数据同步
- **守护进程**systemd服务定时自动同步数据
- **批量导入**:支持历史数据批量导入
- **增量更新**:支持指定日期的增量数据更新
### 4. 数据验证与监控
- **数据一致性验证**校验JSON/CSV/数据库三个数据源的一致性
- **短信告警**集成阿里云短信服务数据异常时自动发送告警错误代码2222
- **验证报告**:生成详细的验证报告,支持保存到专门目录
### 5. 代理管理
- **天启代理集成**支持HTTP代理避免IP限制
- **智能重试机制**
- 同一代理最多尝试3次
- 超时/连接错误立即更换代理
- 最多更换3次代理共尝试4个不同代理
- **错误处理**自动识别errno=10000015异常请求立即更换代理
## 技术栈
- **Python 3.8+**
- **数据库**MySQL 8.0+ (pymysql)
- **网络请求**requests, urllib3
- **抓包工具**mitmproxy 10.0+
- **定时任务**schedule
- **短信服务**阿里云短信SDK (alibabacloud_dysmsapi20170525)
## 项目结构
```
xhh_baijiahao/
├── db/ # 数据库SQL脚本
│ ├── ai_articles.sql # 文章表
│ ├── ai_authors.sql # 作者表
│ ├── ai_statistics_days.sql # 日统计表
│ ├── ai_statistics_weekly.sql # 周统计表
│ └── ai_statistics_monthly.sql # 月统计表
├── ai_sms/ # 阿里云短信服务
│ └── ai_sms/ # 短信SDK示例代码
├── 核心模块
├── bjh_analytics.py # 百家号数据分析API主要
├── bjh_analytics_date.py # 指定日期数据抓取
├── bjh_articles_crawler.py # 文章爬虫
├── export_to_csv.py # 数据导出CSV
├── import_csv_to_database.py # CSV导入数据库
├── Cookie管理
├── mitmproxy_capture.py # mitmproxy Cookie捕获
├── 一键捕获Cookie.py # 快速Cookie捕获工具
├── sync_cookies_to_db.py # 批量Cookie同步
├── add_single_cookie_to_db.py # 单账号Cookie导入
├── add_account_from_cookie.py # 从Cookie添加账号
├── 守护进程与定时任务
├── data_sync_daemon.py # 数据同步守护进程(主要)
├── bjh_data_daemon.py # 备用守护进程
├── bjh_daemon.service # systemd服务配置
├── deploy_daemon.sh # 守护进程部署脚本
├── install_service.sh # 服务安装脚本
├── diagnose_service.sh # 服务诊断脚本
├── 数据验证与告警
├── data_validation.py # 数据验证核心
├── data_validation_with_sms.py # 数据验证+短信告警
├── test_validation_sms.sh # Linux测试脚本
├── test_validation_sms.bat # Windows测试脚本
├── 批量任务
├── batch_import_history.py # 历史数据批量导入
├── fetch_date_statistics.py # 指定日期统计获取
├── update_day_revenue.py # 日收益更新
├── 配置文件
├── database_config.py # 数据库配置
├── log_config.py # 日志配置
├── sms_config.json # 短信服务配置
├── requirements.txt # Python依赖
└── 快捷脚本
├── 一键捕获Cookie.bat # Windows一键Cookie捕获
├── 启动数据同步守护进程.bat # Windows启动守护进程
└── 抓取百家号文章.bat # Windows文章抓取
```
## 快速开始
### 1. 安装依赖
```bash
pip install -r requirements.txt
```
核心依赖:
- `requests>=2.31.0`
- `pymysql>=1.1.0`
- `mitmproxy>=10.0.0`
- `schedule>=1.2.0`
- `python-dateutil>=2.8.0`
### 2. 配置数据库
编辑 `database_config.py`配置MySQL连接信息
```python
DB_CONFIG = {
'host': 'your_host',
'port': 3306,
'user': 'your_user',
'password': 'your_password',
'database': 'ai_article',
'charset': 'utf8mb4'
}
```
### 3. 初始化数据库
执行 `db/` 目录下的SQL脚本创建表
```bash
mysql -u root -p ai_article < db/ai_authors.sql
mysql -u root -p ai_article < db/ai_articles.sql
mysql -u root -p ai_article < db/ai_statistics_days.sql
mysql -u root -p ai_article < db/ai_statistics_weekly.sql
mysql -u root -p ai_article < db/ai_statistics_monthly.sql
```
### 4. 捕获Cookie
#### Windows:
```bash
一键捕获Cookie.bat
```
#### Linux:
```bash
python3 mitmproxy_capture.py
```
### 5. 同步Cookie到数据库
```bash
python3 sync_cookies_to_db.py
```
### 6. 启动数据同步守护进程
#### Linux (推荐使用systemd):
```bash
# 部署服务
sudo bash deploy_daemon.sh
# 启动服务
sudo systemctl start bjh_daemon
# 查看状态
sudo systemctl status bjh_daemon
# 查看日志
journalctl -u bjh_daemon -f
```
#### Windows:
```bash
启动数据同步守护进程.bat
```
#### 手动运行:
```bash
python3 data_sync_daemon.py
```
## 主要功能使用
### 批量导入历史数据
```bash
python3 batch_import_history.py
```
支持交互式选择:
- 账号选择(单个/多个/全部)
- 日期范围设置
- 是否使用代理
- 数据库/文件来源选择
### 获取指定日期统计数据
```bash
python3 fetch_date_statistics.py 2025-12-26
```
### 导出数据为CSV
```bash
python3 export_to_csv.py
```
### 数据验证与短信告警
```bash
# 执行验证
python3 data_validation_with_sms.py
# 测试短信功能
python3 data_validation_with_sms.py --test-sms
```
验证报告保存在 `validation_reports/` 目录。
### 添加单个账号Cookie
```bash
python3 add_single_cookie_to_db.py
```
支持交互式输入:
- Username / 昵称
- App ID / 领域
- Cookie (多种格式)
## 数据库表结构
### ai_authors - 作者表
- `id`: 主键
- `author_name`: 作者名称使用username或nick
- `app_id`: 百家号app_id
- `toutiao_cookie`: Cookie字符串
- `channel`: 渠道1=百家号)
- `status`: 状态active/inactive
### ai_statistics_days - 日统计表
- `author_id`: 作者ID
- `stat_date`: 统计日期
- `day_revenue`: 当日收益
- `daily_published_count`: 当日发文量
- `cumulative_published_count`: 累计发文量
- 唯一键:`uk_author_stat_date(author_id, channel, stat_date)`
### ai_statistics_weekly - 周统计表
- `author_id`: 作者ID
- `stat_weekly`: 周一日期(自然周)
- `weekly_revenue`: 当周收益(从日数据汇总)
- `revenue_wow_growth_rate`: 周环比增长率
### ai_statistics_monthly - 月统计表
- `author_id`: 作者ID
- `stat_monthly`: 每月1日日期
- `monthly_revenue`: 当月收益(从日数据汇总)
- `revenue_mom_growth_rate`: 月环比增长率
## 代理配置
项目支持天启代理API配置在代码中
```python
PROXY_API = "http://api.tianqiip.com/getip?secret=xxx&num=1&type=txt&port=1&mr=1&sign=xxx"
```
代理特性:
- IP白名单认证无需账号密码
- 返回格式:纯文本 `IP:端口`
- 智能重试:超时/连接错误立即更换代理
- 双重限制同一代理最多3次最多更换3次代理
## 短信告警配置
编辑 `sms_config.json`
```json
{
"access_key_id": "your_access_key_id",
"access_key_secret": "your_access_key_secret",
"sign_name": "your_sign_name",
"template_code": "SMS_486210104",
"phone_numbers": "13621242430",
"endpoint": "dysmsapi.aliyuncs.com"
}
```
## 守护进程配置
### systemd服务配置 (bjh_daemon.service)
```ini
[Unit]
Description=百家号数据同步守护进程(含数据验证与短信告警)
After=network.target mysql.service
[Service]
Type=simple
User=root
WorkingDirectory=/root/xhh_baijiahao
ExecStart=/usr/bin/python3 data_sync_daemon.py
Restart=always
Environment="LOAD_FROM_DB=true"
Environment="USE_PROXY=true"
Environment="ENABLE_VALIDATION=true"
Environment="NON_INTERACTIVE=true"
[Install]
WantedBy=multi-user.target
```
### 环境变量配置
- `LOAD_FROM_DB`: 是否从数据库加载Cookie (true/false)
- `USE_PROXY`: 是否使用代理 (true/false)
- `DAYS`: 抓取天数 (默认7)
- `MAX_RETRIES`: 最大重试次数 (默认3)
- `RUN_NOW`: 是否立即执行 (true/false)
- `ENABLE_VALIDATION`: 是否启用验证 (true/false)
- `NON_INTERACTIVE`: 非交互模式 (true/false)
## 日志管理
日志文件位置:
- 守护进程:`logs/data_sync_daemon.log`
- 数据库操作:`logs/database.log`
- Cookie同步`logs/cookie_sync.log`
- 验证报告:`validation_reports/validation_report_YYYYMMDD_HHMMSS.txt`
查看实时日志:
```bash
tail -f logs/data_sync_daemon.log
```
## 常见问题
### 1. Cookie失效
- 症状API返回 `errno=10000015`(异常请求)
- 解决重新捕获Cookie并同步到数据库
### 2. 代理超时
- 症状请求超时15秒
- 解决系统自动更换新代理最多尝试4个不同代理
### 3. 数据验证失败
- 症状短信收到错误代码2222
- 解决:查看 `validation_reports/` 中的详细报告
### 4. 守护进程停止
- 诊断:`sudo bash diagnose_service.sh`
- 重启:`sudo systemctl restart bjh_daemon`
## 开发说明
### 添加新账号
1. 使用 `一键捕获Cookie.py` 捕获Cookie
2. 运行 `sync_cookies_to_db.py` 同步到数据库
3. 或使用 `add_single_cookie_to_db.py` 手动添加
### 修改统计维度
- 日统计:修改 `ai_statistics_days` 表结构
- 周统计:修改 `ai_statistics_weekly` 表结构
- 月统计:修改 `ai_statistics_monthly` 表结构
### 自定义代理
修改 `bjh_analytics.py``bjh_analytics_date.py` 中的代理获取逻辑:
```python
def fetch_proxy(self, force_new: bool = False):
# 自定义代理获取逻辑
pass
```
## 贡献指南
欢迎提交Issue和Pull Request
## 许可证
本项目仅供学习和研究使用。
## 联系方式
如有问题请通过Issue反馈。