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