2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00
2025-12-25 11:16:59 +08:00

百家号数据采集与分析系统

项目简介

本项目是一个面向百家号平台的自动化数据采集、分析与监控系统,支持多账号管理、定时数据同步、数据验证和短信告警等功能。

核心功能

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.0
  • pymysql>=1.1.0
  • mitmproxy>=10.0.0
  • schedule>=1.2.0
  • python-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_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配置在代码中

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

开发说明

添加新账号

  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.pybjh_analytics_date.py 中的代理获取逻辑:

def fetch_proxy(self, force_new: bool = False):
    # 自定义代理获取逻辑
    pass

贡献指南

欢迎提交Issue和Pull Request

许可证

本项目仅供学习和研究使用。

联系方式

如有问题请通过Issue反馈。

Description
百家号收益与信息爬取
Readme 7.5 MiB
Languages
Python 99.2%
C 0.4%
JavaScript 0.1%