charley fec46a381a chore(logs): 清理已过期的销售日报日志文件 4 өдөр өмнө
..
common 8ba2325a19 feat(account_pool): 实现得卡账号池及多账号管理框架 4 өдөр өмнө
docs 8ba2325a19 feat(account_pool): 实现得卡账号池及多账号管理框架 4 өдөр өмнө
reports fec46a381a chore(logs): 清理已过期的销售日报日志文件 4 өдөр өмнө
spiders 8ba2325a19 feat(account_pool): 实现得卡账号池及多账号管理框架 4 өдөр өмнө
README.md 8ba2325a19 feat(account_pool): 实现得卡账号池及多账号管理框架 4 өдөр өмнө
YamlLoader.py 8ba2325a19 feat(account_pool): 实现得卡账号池及多账号管理框架 4 өдөр өмнө
application.yml 8ba2325a19 feat(account_pool): 实现得卡账号池及多账号管理框架 4 өдөр өмнө
mysql_pool.py 8ba2325a19 feat(account_pool): 实现得卡账号池及多账号管理框架 4 өдөр өмнө
requirements.txt 8ba2325a19 feat(account_pool): 实现得卡账号池及多账号管理框架 4 өдөр өмнө
start_all.py 8ba2325a19 feat(account_pool): 实现得卡账号池及多账号管理框架 4 өдөр өмнө
球队.json 8ba2325a19 feat(account_pool): 实现得卡账号池及多账号管理框架 4 өдөр өмнө

README.md

得卡 DECA 自动化爬虫

得卡(decalive.com,国内球星卡 / 卡片交易平台)数据采集与报告系统。多任务常驻采集在售 / 已售 / 购买记录 / 选队总价,定时产出企微报告,底层由 20 账号池 + 1 号 1 专属静态 IP 支撑,账号可经接码平台全自动补货。

⚠️ 上线头等风险:本目录与旧目录 D:\work\2026-08-02(deca_spider) 背后是同一批得卡账号,refreshToken 一次性轮换。两边同时真跑会互相踩废 token。上线前务必先停旧目录对应任务,确认只有一处在跑。


一、快速开始

# 1. 进入项目根目录
cd "D:\work\2026-09-08(deca_auto_spider)"

# 2. 安装依赖(首次)
pip install -r requirements.txt
# 公共库 charley-utils(mysql_pool / YamlLoader)单独 editable 安装,见下「环境依赖」

# 3. 一键启动全部常驻任务(采集 + 报告调度 + 运维,崩溃自动重启)
python start_all.py

# 只启动部分任务
python start_all.py buy_record team

Ctrl+C 优雅终止所有子任务。


二、目录结构

2026-09-08(deca_auto_spider)/
├── start_all.py             # ★统一部署入口:一键拉起全部常驻任务 + 崩溃自动重启
├── application.yml           # 数据库配置(host 100.64.0.25 / db crawler)
│
├── common/        # 公共库(采集 + 报告都 import,扁平 import 名)
│   ├── settings.py    #   ★集中配置:账号池阈值 / 接口路径 / 接码 Key / 代理 IP 池
│   ├── account_pool.py    #   ★账号池:取号 / 切号 / 续期 / 状态机 / 巡检 / 自动补货
│   ├── deca_sold_core.py     #   核心:签名 / do_request / 账号池接入(线程隔离)
│   ├── isms_client.py   #   接码平台(爱接码 i-sms.app)客户端
│   ├── deca_on_sale_daily_spider.py#   在售详情解析 / 入库(现全走免登录接口)
│   ├── auto_send_wx_msg.py         #   企微群机器人推送
│   └── deca_account_ddl.sql        # 账号表 deca_account_record 建表 DDL
│
├── spiders/              # 采集任务(脚本内自行 chdir 到项目根,共用根配置)
│   ├── buy_record_spider.py        #购买记录(重点 5 家,8 线程并发)
│   ├── onsale_alert_spider.py      #   上架提醒(新上架监控推送)
│   ├── sold_daily_spider.py        # 已售每日采集
│   ├── sold_history_spider.py      #   已售历史回补
│   ├── deca_team_spider.py #   选队随机总价(5 分钟/轮,只扫重点 5 家)
│   ├── replenish_accounts.py       #   ★一键补号(经接码平台自动注册入库)
│   └── maintenance.py       #   ★运维:cooling 巡检 + Excel 定时清理
│
└── reports/
    ├── onsale_report/# 在售报告(用 token,chdir 项目根)
    │   └── deca_on_sale_report.py  #   在售报告:每天 09/15/20/01 四次(仅出 Excel)
    └── sold_report/    # 已售报告(不用 token,chdir 自身目录)
        ├── run_scheduler.py   #   ★调度器:日报 09:10 + 周报周一 09:20 + 月报 1 号 09:30
     ├── daily_report.py         #   已售每日报告(重点商家明细 + 买家排行)
        ├── weekly_report.py#   魔都球星卡周报
        ├── monthly_report.py       #   魔都球星卡月报
    └── application.yml 球队.json ...   # 本目录自带(因 chdir 自身目录)

三、环境依赖

  • Python 3.12.10
  • 第三方包(见 requirements.txt):requests loguru tenacity schedule openpyxl matplotlib
  • 公共库 charley-utilsmysql_pool / YamlLoader,本机 editable 安装,各项目直接 import):

    cd D:\work\common\charley-utils
    pip install -e .          # 换新环境导入失败时执行一次即可
    

依赖 pymysql DBUtils PyYAML(由该包声明)。禁止把 mysql_pool.py 复制进本项目——统一维护一份。

  • 数据库mysql_pool运行目录下的 application.ymlmysql.host/port/username/password/db)。项目根与 reports/sold_report/ 各自带一份。

四、配置

所有账号池 / 接码 / 代理相关配置集中在 common/settings.py,改配置只动这一处:

配置项 说明
POOL_TARGET_SIZE = 20 账号池目标规模
LEASE_TTL_SEC = 6h 进程独占一个号的租约 TTL(崩溃后到期自动可再租,不死占)
DEAD_CODES = {10010} 续期判死码(10010 =「长期未登录,请重新登录」→ 判 dead 摘池)
ISMS_API_KEY / ISMS_PROJECT_KEYWORD 接码平台(爱接码)Key 与项目关键词「优豪卡」
PROXY_USER/PASS/PORT + PROXY_IPS[20] 20 个国内静态 IP(1 号 1 IP 永久绑定,端口 16816)

⚠️ settings.py 含接码 API Key 与代理账密,私有仓库专用,勿外传 / 勿提交公开仓库

数据库配置在 application.yml(当前库:100.64.0.25 / crawler)。


五、账号池

得卡 need_auth 接口的登录态由账号池统一管理,采集脚本无需关心 token。

  • 数据模型:表 deca_account_record(DDL 见 common/deca_account_ddl.sql)。自增 id 主键、phone 唯一键、每号独立 access/refresh/token_exp、proxy_url(专属 IP)、status(healthy/cooling/dead)、进程独占租约字段。
  • 取号策略每批随机——每 20 个 need_auth 请求随机换一个 healthy 号,请求量摊到全池,单号风控面最小。
  • 登录态操作走专属 IP:续期 / 短信登录都从该号绑定的静态 IP 发出,不暴露本机 IP。
  • 多线程安全buy_record 用 8 线程并发,账号池按 thread-local 隔离——每线程独立持号、独立续期,互不踩踏。
  • 判死与恢复:续期命中 10010 → 判 dead 摘池 + 企微通知;网络异常算软失败不判死;maintenance.py 每 10 分钟巡检恢复 cooling 号。
  • 短信登录即注册:得卡无独立注册接口,短信验证码登录即完成注册。补号经接码平台租号 → 收码 → 短信登录入库 → 绑定空闲 IP。

补号(账号不足时)

python spiders/replenish_accounts.py --target 20 --batch 5
  • --target 池子总目标数,--batch 单次最多补几个。
  • ⚠️ 得卡强风控,别一次连续注册一大批(半小时爆十几个新号是典型连坐信号),建议分几天补(每天 --batch 3~5)。
  • 补号是长任务(每号错峰停顿 30~90s、收码等待),在终端里跑,别用受超时限制的环境。
  • 注意接码平台余额(失败号也扣取号费)。

六、任务清单与调度

start_all.py 统一管理以下 7 个常驻任务,任一崩溃退出 15s 后自动重启:

任务名 脚本 说明 / 调度
buy_record buy_record_spider.py 购买记录(重点 5 家,8 线程)
onsale_alert onsale_alert_spider.py 上架提醒(新上架监控推送)
sold_daily sold_daily_spider.py 已售每日采集
team deca_team_spider.py 选队随机总价(5 分钟/轮,只扫重点 5 家)
onsale_report deca_on_sale_report.py loop 在售报告:每天 09 / 15 / 20 / 01 四次(仅出 Excel)
sold_report run_scheduler.py 已售:日报 09:10 + 周报周一 09:20 + 月报 1 号 09:30
maintenance maintenance.py 账号池 cooling 巡检(每 10 分钟)+ Excel 清理(每天 03:00,保留 30 天)

单独运行任一脚本也可(各脚本自带 bootstrap 会 chdir 到所需目录):

python spiders/buy_record_spider.py
python reports/sold_report/run_scheduler.py

七、服务器常驻(最简方式)

start_all.py 已自带崩溃自动重启,服务器上只需让它在后台常驻即可。

Windows(后台启动,日志落 logs/):

start /b python start_all.py

Linux(nohup 后台 + 日志重定向):

cd /path/to/2026-09-08(deca_auto_spider)
nohup python -u start_all.py > logs/start_all.out 2>&1 &

如需开机自启 / 掉电自恢复,可进一步用 Windows 计划任务(nssm)或 Linux systemd 托管 start_all.py——按需再加,最简常驻用上面即可。


八、注意事项

  1. 上线前先停旧目录:确认 D:\work\2026-08-02(deca_spider) 对应生产任务已停,避免同账号双跑踩废 token(见文首风险提示)。
  2. 登录态全由账号池接管:所有 need_auth 请求统一走账号池(随机取号 + 续签 + 各号专属静态 IP)。deca_sold_core 仅暴露 init_account_pool(...) 一个开关,采集脚本启动时调用即生效,无其它登录态路径。
  3. 代理 IP 有效期:当前 20 个静态 IP 有效期至 2026-10-09,到期需在快代理续费并同步 settings.PROXY_IPS
  4. 版本号写入:涉及 Python / 依赖版本时,先 --version 实测再写,勿凭记忆。

九、相关文档

  • 账号池落地全文:docs/账号池落地_得卡DECA_20260909.md(架构 / 数据模型 / 短信登录=注册 / 判死 / IP 选型 / 实测 / 上线步骤)
  • 进度台账 / 交接:HANDOFF.md(新窗口接手先读)