| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- """
- 采集数据 Excel 备份 — 按天一个文件,一个药品(搜索词)一个工作表
- 列: 标题 | 价格 | 店铺名(列表页OCR) | 店铺名(AI详情页) | 快照URL | 商品链接 | 来源截图
- 用途: 对比列表页OCR店铺名和详情页AI提取店铺名的差异;来源截图供 audit_ocr.py 事后核对OCR准确率
- 文件: 采集数据/YYYYMMDD.xlsx,sheet = 药品名
- """
- import re
- import time
- from pathlib import Path
- EXCEL_DIR = Path(__file__).parent / "采集数据"
- HEADERS = ["标题", "价格", "店铺名(列表页OCR)", "店铺名(AI详情页)", "快照URL", "商品链接", "来源截图"]
- def _safe_sheet_name(name: str) -> str:
- """Excel sheet名限制:≤31字符,不允许 []:*?/\\ """
- name = re.sub(r'[\[\]:*?/\\]', '', str(name or "")).strip()
- return (name or "采集")[:31]
- def append_row(title: str, price: str, shop_list: str, shop_ai: str,
- snapshot_url: str, link: str, sheet_name: str = "",
- source: str = "") -> None:
- """追加一行到当天 Excel 的对应药品 sheet,失败只打印不抛异常(不影响采集主流程)
- source: 来源截图标识(如 OV7T8PV8GEHYSCNB/step3_b5),供事后OCR准确率核对追溯"""
- try:
- from openpyxl import Workbook, load_workbook
- except ImportError:
- print("[excel] 未安装 openpyxl,跳过Excel备份(pip install openpyxl)")
- return
- try:
- EXCEL_DIR.mkdir(exist_ok=True)
- path = EXCEL_DIR / f"{time.strftime('%Y%m%d')}.xlsx"
- sheet = _safe_sheet_name(sheet_name)
- if path.exists():
- wb = load_workbook(path)
- if sheet in wb.sheetnames:
- ws = wb[sheet]
- else:
- ws = wb.create_sheet(sheet)
- ws.append(HEADERS)
- else:
- wb = Workbook()
- ws = wb.active
- ws.title = sheet
- ws.append(HEADERS)
- ws.append([
- str(title or ""), str(price or ""),
- str(shop_list or ""), str(shop_ai or ""),
- str(snapshot_url or ""), str(link or ""),
- str(source or ""),
- ])
- wb.save(path)
- print(f"[excel] 已保存: {path.name} [{sheet}]")
- except Exception as e:
- print(f"[excel] 保存失败: {e}")
|