百家号数据采集与分析系统
项目简介
本项目是一个面向百家号平台的自动化数据采集、分析与监控系统,支持多账号管理、定时数据同步、数据验证和短信告警等功能。
核心功能
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. 安装依赖
pip install -r requirements.txt
核心依赖:
requests>=2.31.0pymysql>=1.1.0mitmproxy>=10.0.0schedule>=1.2.0python-dateutil>=2.8.0
2. 配置数据库
编辑 database_config.py,配置MySQL连接信息:
DB_CONFIG = {
'host': 'your_host',
'port': 3306,
'user': 'your_user',
'password': 'your_password',
'database': 'ai_article',
'charset': 'utf8mb4'
}
3. 初始化数据库
执行 db/ 目录下的SQL脚本创建表:
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:
一键捕获Cookie.bat
Linux:
python3 mitmproxy_capture.py
5. 同步Cookie到数据库
python3 sync_cookies_to_db.py
6. 启动数据同步守护进程
Linux (推荐使用systemd):
# 部署服务
sudo bash deploy_daemon.sh
# 启动服务
sudo systemctl start bjh_daemon
# 查看状态
sudo systemctl status bjh_daemon
# 查看日志
journalctl -u bjh_daemon -f
Windows:
启动数据同步守护进程.bat
手动运行:
python3 data_sync_daemon.py
主要功能使用
批量导入历史数据
python3 batch_import_history.py
支持交互式选择:
- 账号选择(单个/多个/全部)
- 日期范围设置
- 是否使用代理
- 数据库/文件来源选择
获取指定日期统计数据
python3 fetch_date_statistics.py 2025-12-26
导出数据为CSV
python3 export_to_csv.py
数据验证与短信告警
# 执行验证
python3 data_validation_with_sms.py
# 测试短信功能
python3 data_validation_with_sms.py --test-sms
验证报告保存在 validation_reports/ 目录。
添加单个账号Cookie
python3 add_single_cookie_to_db.py
支持交互式输入:
- Username / 昵称
- App ID / 领域
- Cookie (多种格式)
数据库表结构
ai_authors - 作者表
id: 主键author_name: 作者名称(使用username或nick)app_id: 百家号app_idtoutiao_cookie: Cookie字符串channel: 渠道(1=百家号)status: 状态(active/inactive)
ai_statistics_days - 日统计表
author_id: 作者IDstat_date: 统计日期day_revenue: 当日收益daily_published_count: 当日发文量cumulative_published_count: 累计发文量- 唯一键:
uk_author_stat_date(author_id, channel, stat_date)
ai_statistics_weekly - 周统计表
author_id: 作者IDstat_weekly: 周一日期(自然周)weekly_revenue: 当周收益(从日数据汇总)revenue_wow_growth_rate: 周环比增长率
ai_statistics_monthly - 月统计表
author_id: 作者IDstat_monthly: 每月1日日期monthly_revenue: 当月收益(从日数据汇总)revenue_mom_growth_rate: 月环比增长率
代理配置
项目支持天启代理,API配置在代码中:
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:
{
"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)
[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
查看实时日志:
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
开发说明
添加新账号
- 使用
一键捕获Cookie.py捕获Cookie - 运行
sync_cookies_to_db.py同步到数据库 - 或使用
add_single_cookie_to_db.py手动添加
修改统计维度
- 日统计:修改
ai_statistics_days表结构 - 周统计:修改
ai_statistics_weekly表结构 - 月统计:修改
ai_statistics_monthly表结构
自定义代理
修改 bjh_analytics.py 和 bjh_analytics_date.py 中的代理获取逻辑:
def fetch_proxy(self, force_new: bool = False):
# 自定义代理获取逻辑
pass
贡献指南
欢迎提交Issue和Pull Request!
许可证
本项目仅供学习和研究使用。
联系方式
如有问题,请通过Issue反馈。
Description
Languages
Python
99.2%
C
0.4%
JavaScript
0.1%