sold_daily_spider.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. # -*- coding: utf-8 -*-
  2. # Author : Charley
  3. # Python : 3.12.10
  4. # Date : 2026/08/04
  5. """得卡 DECA 已售流程——每日新增增量采集(常驻定时)。
  6. 完整管道,增量模式(每商家历史成交连续无新页即早停,只采新成交):
  7. 商家列表 → 每商家已售(增量) → 详情补抓 → 卡密清单 → 拆卡报告 + 视频回放。
  8. 拆卡报告/回放靠 report_state/replay_state 驱动,拿不到(还没生成)下轮重采。
  9. 从根目录运行:python sold_daily_spider.py(每天 03:00 一次)
  10. """
  11. import sys
  12. import time
  13. import schedule
  14. from loguru import logger
  15. from tenacity import retry, stop_after_attempt, wait_fixed
  16. from mysql_pool import MySQLConnectionPool
  17. import deca_sold_core as core
  18. logger.remove()
  19. logger.add("./logs/sold_daily_{time:YYYYMMDD}.log", encoding="utf-8", rotation="00:00",
  20. format="[{time:YYYY-MM-DD HH:mm:ss.SSS}] {level} {message}",
  21. level="DEBUG", retention="7 day")
  22. @retry(stop=stop_after_attempt(100), wait=wait_fixed(3600), after=core.after_log)
  23. def main_task(log):
  24. """已售每日增量采集(连续无新页早停,incremental=True)。
  25. Args:
  26. log: 日志对象。
  27. Raises:
  28. RuntimeError: 数据库连接池异常时抛出以触发重试。
  29. """
  30. log.info(f"开始运行 {sys._getframe().f_code.co_name} 已售每日增量采集" + "." * 40)
  31. pool = MySQLConnectionPool(log=log)
  32. if not pool.check_pool_health():
  33. log.error("数据库连接池异常")
  34. raise RuntimeError("数据库连接池异常")
  35. try:
  36. core.run_pipeline(log, pool, incremental=True)
  37. except Exception as e:
  38. log.error(f"{sys._getframe().f_code.co_name} error: {e}")
  39. finally:
  40. log.info(f"已售每日增量采集 {sys._getframe().f_code.co_name} 运行结束" + "." * 20)
  41. def schedule_task():
  42. """定时任务入口:每天 03:00 增量采集一次。"""
  43. # main_task(log=logger) # 立即跑一次(调试时取消注释)
  44. schedule.every().day.at("08:00").do(main_task, log=logger)
  45. while True:
  46. schedule.run_pending()
  47. time.sleep(1)
  48. if __name__ == "__main__":
  49. schedule_task()