sold_history_spider.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. # -*- coding: utf-8 -*-
  2. # Author : Charley
  3. # Python : 3.12.10
  4. # Date : 2026/08/04
  5. """得卡 DECA 已售流程——历史全量抓取(建库存量,一次性/不定时手动跑)。
  6. 完整管道深翻所有商家的全部历史成交:
  7. 商家列表 → 每商家已售(深翻) → 详情补抓 → 卡密清单 → 拆卡报告 + 视频回放。
  8. 写入 deca_shop_record / deca_product_record / deca_kami_record / deca_report_record。
  9. 从根目录运行:python sold_history_spider.py
  10. """
  11. import sys
  12. from loguru import logger
  13. from tenacity import retry, stop_after_attempt, wait_fixed
  14. from mysql_pool import MySQLConnectionPool
  15. import deca_sold_core as core
  16. logger.remove()
  17. logger.add("./logs/sold_history_{time:YYYYMMDD}.log", encoding="utf-8", rotation="00:00",
  18. format="[{time:YYYY-MM-DD HH:mm:ss.SSS}] {level} {message}",
  19. level="DEBUG", retention="7 day")
  20. @retry(stop=stop_after_attempt(100), wait=wait_fixed(3600), after=core.after_log)
  21. def main_task(log):
  22. """已售历史全量采集(深翻,incremental=False)。
  23. Args:
  24. log: 日志对象。
  25. Raises:
  26. RuntimeError: 数据库连接池异常时抛出以触发重试。
  27. """
  28. log.info(f"开始运行 {sys._getframe().f_code.co_name} 已售历史全量采集" + "." * 40)
  29. pool = MySQLConnectionPool(log=log)
  30. if not pool.check_pool_health():
  31. log.error("数据库连接池异常")
  32. raise RuntimeError("数据库连接池异常")
  33. try:
  34. core.run_pipeline(log, pool, incremental=False)
  35. except Exception as e:
  36. log.error(f"{sys._getframe().f_code.co_name} error: {e}")
  37. finally:
  38. log.info(f"已售历史全量采集 {sys._getframe().f_code.co_name} 运行结束" + "." * 20)
  39. if __name__ == "__main__":
  40. logger.add(sys.stderr, level="INFO") # 历史全量为手动跑,控制台同步输出
  41. main_task(logger)