Files
baijiahao_data_crawl/README.md

397 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 百家号数据采集与分析系统
## 项目简介
本项目是一个面向百家号平台的自动化数据采集、分析与监控系统,支持多账号管理、定时数据同步、数据验证和短信告警等功能。
## 核心功能
### 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反馈。