下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/user_ad45f167--douyin-selenium-scraper-skill.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_ad45f167/douyin-selenium-scraper-skill。>这是一个能帮你快速掌握抖音最新爆款动向的数据分析工具。它能一键抓取蝉妈妈平台的核心情报,自动生成包含热门视频TOP10、全网热搜TOP10、电商带货TOP10的结构化报告,并附带趋势洞察。数据可直接导出为CSV表格,让你轻松拿捏流量密码与选品方向。
阅读全文 (展开查看完整说明)
概述
douyin-selenium-scraper — 抖音数据爬虫 v2.3
一键抓取抖音热门视频 / 电商带货 / 全网热搜 TOP10,输出结构化报告 + CSV + JSON。
渲染通道逐级降级:Selenium → Chrome –dump-dom → 仅热搜,任何一级可用就不会整轮失败。
目录
- [快速开始](#快速开始)
- [CLI 参数](#cli-参数)
- [输出模板](#输出模板)
- [代码架构](#代码架构)
- [数据源与URL](#数据源与url)
- [分类体系](#分类体系)
- [在 WorkBuddy 中调用](#在-workbuddy-中调用)
- [集成自动化](#集成自动化)
- [排障指南](#排障指南)
- [修复记录](#修复记录)
快速开始
前置条件
| 条件 | 要求 |
|---|---|
| Python | 3.10+(推荐 3.13) |
| Chrome / Edge | 已安装。Selenium 能用则用,不能用会自动走 –dump-dom,无需 chromedriver 版本匹配 |
| 虚拟环境 | Skill 目录下 .venv/ |
安装(Skill 已自包含)
cd ~/.workbuddy/skills/douyin-selenium-scraper
python -m venv .venv
.venv/Scripts/pip install -r requirements.txt运行
方式一:一键启动器(跨平台,首次自动建 venv 并装依赖)
python run.py # 全量抓取,产出到 ./reports/
python run.py --only search # 只抓热搜
python run.py --limit 5 --json out.json传给 run.py 的参数会原样透传给主脚本,结束后打印退出码含义。.py 是纯文本脚本,不会被那些「禁止上传可执行文件」的平台拦截(早期版本用的 run.bat 就会被判为不允许的文件类型,已移除)。
方式二:直接调 Python
# 全量抓取(热门 + 电商 + 热搜)
.venv/Scripts/python.exe douyin_scraper.py
# 只抓热搜(不需要浏览器,约 0.3s)
.venv/Scripts/python.exe douyin_scraper.py --only search目录结构
douyin-selenium-scraper/
├── SKILL.md # 本文档
├── _icon.png # 图标 512×512(界面展示用)
├── douyin_scraper.py # 主脚本
├── run.py # 一键入口(自动准备 .venv)
├── categories.json # 分类规则(可改,无需动代码)
├── requirements.txt
└── tests/test_scraper.py # 回归测试(31 项)固定 7 个文件(含 1 个图标),无运行产物。.venv/(约 2,600 个文件 / 71MB)和 reports/都是运行产物,不随包分发,也不要提交到版本库:
| 目录 | 产生方式 | 是否入库 |
|---|---|---|
.venv/ | 首次运行 run.py 自动创建 | ❌ 删掉可随时重建 |
reports/ | 每次运行自动创建 | ❌ 输出目录 |
__pycache__/ | Python 字节码缓存 | ❌ |
需要分发包时,只压这 7 个文件,保持归档内文件数在个位数。
预期产出
reports/
├── douyin_report_20261029_120500.txt # 四段式报告
├── douyin_hot_videos_20261029_120500.csv # 热门视频(UTF-8-BOM)
├── douyin_ecommerce_20261029_120500.csv # 电商带货(含销量/销售额)
└── out.json # 指定 --json 时额外生成实测基线(2026-10-29,Chrome 156 + driver 失效走 dump-dom)
| 场景 | 耗时 | 产出 |
|---|---|---|
--only search | 2.1s(内部 0.2s) | 热搜 10 条 |
| 全量(dump-dom) | 19.5–27s | 10 + 10 + 10,退出码 0 |
| 全量(Selenium 正常) | 约 15–25s | 同上 |
| 全无浏览器 | 约 4s | 仅热搜,退出码 2 |
CLI 参数
python douyin_scraper.py [options]
--only {hot,ecommerce,search} 只抓哪些板块,逗号分隔(默认全部)
--limit N 每个榜单输出条数(默认 10)
--outdir PATH 输出目录(默认 ./reports)
--json PATH 额外输出 JSON,供下游自动化消费
--headed 有头模式,排查反爬时用
--timeout N 单页等待数据渲染超时秒数(默认 20)
--keep-days N 产物保留天数(默认 3,0=不清理)
--no-cleanup 跳过历史文件清理退出码
| 码 | 含义 | 自动化里该怎么处理 |
|---|---|---|
| 0 | 所有请求板块都拿到数据(含 dump-dom 降级成功) | 正常 |
| 2 | 部分板块失败(通常只剩热搜) | 可继续用,但要标注缺失板块 |
| 1 | 所有板块都失败 / 参数错误 | 触发告警,走 WebSearch 兜底 |
输出模板
报告文件 .txt 结构(四段式)
ℹ️ 数据说明:chromedriver 不可用,已自动改用 Chrome --dump-dom 免驱动渲染完成抓取
(不支持滚动交互,仅首屏 TOP10)。首行提示分两档语气,由数据是否真的缺失决定:
| 前缀 | 触发条件 | 含义 |
|---|---|---|
ℹ️ 数据说明 | 板块齐全,仅取数通道切换 | 数据完整,可正常使用 |
⚠️ 数据完整性提示 | 有板块缺失(parts_fail 非空) | 该板块当天没拿到,需人工关注 |
============================================================
抖音热门视频 TOP 10
============================================================
🏆 Top 1 - {视频标题,超 42 字截断}
达人:{作者名}
热度:{点赞数}
详情链接:https://www.douyin.com/video/{ID}
🥈 Top 2 - ...
...(共10条)
============================================================
全网热搜 TOP 10(来源:百度实时热搜)
============================================================
🏆 Top 1 - {热搜词}
热度:{万级热度值}
详情链接:https://www.douyin.com/search/{URL编码词}
...(共10条)
============================================================
电商带货热榜视频 TOP 10
============================================================
🏆 Top 1 - {商品标题}
达人:{作者名,未登录时为"未知"}
热度:{点赞数}
品类:{电商品类}
周期内销量:{区间 估算值} · 销售额:{区间 估算值}
详情链接:https://www.douyin.com/video/{ID}
...(共10条)
注:本榜按成交额口径排序;销量/销售额为蝉妈妈展示的区间与估算值;
达人名为「未知」表示该榜单对未登录访客隐藏作者信息。
============================================================
趋势洞察
============================================================
赛道分布:情感(3条)、搞笑(1条)、社会热点(1条)...
热搜特征:时政类;社会民生;财经商业
超级爆款:{标题} 等 N 条视频突破 30 万点赞
电商热品:家居日用(4条)、食品饮料(4条)...
带货榜首:{标题},周期内销售额 10w~25w(榜单按成交额排序)
今日节点:体育赛事、教育考试、天气气候 相关内容占据主导
黑马观察:{冷门内容}(@达人)等冷门赛道内容异军突起
数据更新时间:YYYY年MM月DD日 HH:MM「未运行」和「未获取到」是两回事
用 --only 只抓部分板块时,报告里没抓的板块会标注:
(本次未运行热门视频板块,非抓取失败) ← --only search 主动跳过
(本次未获取到热门视频数据) ← 真的跑了但抓不到两者含义完全不同,排障时先看这句再决定要不要修。
CSV 字段
⚠️ 蝉妈妈榜单没有播放量字段。v2.1 曾把「转发数」当「播放量」写进 CSV,
v2.3 起已移除该列,改为真实的转发数。
热门视频 CSV(douyin_hot_videos_*.csv,9 列):
| 字段 | 说明 | 示例 |
|---|---|---|
| 排名 | 榜单官方名次(排名列由 CSS 渲染,用行序兜底) | 1 |
| 视频标题 | 完整标题(不截断,报告里才截断) | 应该没被发现吧 #抽象 #搞笑 |
| 达人 | 已清理粉丝数与时间戳 | 闪现 |
| 点赞数 | 格式化 | 23.6万 |
| 转发数 | 真实转发数(v2.3 修复) | 48.9万 |
| 评论数 | 0 显示为 0 | 1.0万 |
| 赛道分类 | 自动标注(18 类) | 搞笑 |
| 视频链接 | douyin.com 原地址 | https://www.douyin.com/video/7701659781928389929 |
| 一句话点评 | AI 增强时填充 |
电商带货 CSV(douyin_ecommerce_*.csv,11 列):在热门表基础上,分类列名为 商品品类,并多出两列:
| 字段 | 说明 | 示例 |
|---|---|---|
| 商品品类 | 7 大电商品类 | 家居日用 |
| 周期内销量 | 蝉妈妈展示的「区间 + 估算值」原样文本 | 5000~1w 1,912 |
| 周期内销售额 | 同上 | 10w~25w 19,125 |
排名徽章
🏆 第1名 / 🥈 第2名 / 🥉 第3名 / 第4-10名 无徽章
代码架构
渲染通道(v2.3 核心变化)
create_driver() 成功? ── 是 → Selenium(支持滚动、可点详情)
│
否 → 报 DriverUnavailable,找 Chrome 可执行文件
│
找到 → Chrome --dump-dom(免驱动,5s/页,仅首屏 TOP10)
│
失败 → 仅热搜模式 + 报告首行提示为什么要有 dump-dom:chromedriver 与 Chrome 版本不匹配时,整个 WebDriver 会话会返回unhandled request(连 about:blank 都导航不了),但 Chrome 本体仍能正常渲染。dump-dom 用 --virtual-time-budget 等 JS 执行完再输出 DOM,不需要任何驱动。
核心模块
douyin_scraper.py
│
├── 分类规则
│ ├── categories.json 加载(缺失/损坏自动回落内置默认值)
│ ├── categorize_video() → 17 赛道 + 其他
│ └── _categorize_ecommerce() → 7 大商品品类
│
├── 渲染
│ ├── create_driver() → Selenium Manager 启动 + about:blank 探活
│ ├── fetch_page_selenium() → 等到 ≥3 行真实数据,再兜底滚动 1 轮
│ ├── find_chrome() → 定位 Chrome/Edge
│ └── fetch_page_chrome_dump() → 免驱动渲染(临时 profile,不抢用户 Chrome)
│
├── 解析
│ ├── parse_chanmama() → 三策略降级:表格 → 卡片 → 正则
│ ├── _build_col_map() → ★按表头名建映射(不依赖列位)
│ ├── _extract_from_cells() → 表格行 → 字典(7 列/9 列通用)
│ ├── _range_cell_text() → 读「区间+估算值」单元格
│ └── convert_ies_to_douyin() → iesdouyin → 标准 douyin 地址
│
├── 清洗
│ ├── _parse_number() → "38.6万" → 386000
│ ├── clean_author_name() → 去粉丝数/时间戳/「查看」占位符
│ ├── clean_title() / short_title() → 合并空白 / 报告内截断
│ ├── one_line() → 异常信息压单行
│ └── _deduplicate_and_rank() → 去重 + 保留官方名次
│
├── 输出
│ ├── save_to_csv() → 分类器与追加列由调用方注入
│ ├── save_report() / save_json()
│ └── cleanup_stale_files() → 清理 .tmp 与过期产物
│
├── 热搜
│ ├── fetch_hot_search_top10() → 主源百度(~0.3s)
│ └── _fetch_hot_selenium() → 备源
│
└── main() → Step1 渲染通道 → Step2 热门 → Step3 电商 → Step4 热搜 → 落盘 → 退出码表头映射(重要)
蝉妈妈两个榜单列数不一样,必须按表头名取值:
| 榜单 | 表头(按页面顺序) | 列数 |
|---|---|---|
| 热门视频 | 排名 / 视频 / 达人 / 点赞数 / 转发数 / 评论数 / 操作 | 7 |
| 电商带货 | 排名 / 视频 / 达人 / 点赞数 / 转发数 / 评论数 / 周期内销量 / 周期内销售额 / 操作 | 9 |
两个坑:
- 排名列文本为空(由 CSS
rank-icon渲染),所以用「行序」作为官方名次。 - 电商榜多了两列,v2.1 的固定下标会把「转发数」当「播放量」、把「操作」当「转发数」。
数据源与 URL
| 数据源 | URL | 解析方式 | 数据量 | 实测 |
|---|---|---|---|---|
| 蝉妈妈·热门视频 | https://chanmama.com/awemeRank/hotAweme | 表格按表头解析 | TOP 10 | dump-dom 4.7s |
| 蝉妈妈·电商带货 | https://www.chanmama.com/awemeRank/promotionAweme/ | 同上(9 列) | TOP 10 | dump-dom 4.8s |
| 百度实时热搜 | https://top.baidu.com/board?tab=realtime | JSON 正则 word+hotScore | TOP 10 | requests 0.28s |
URL 注意事项
- 电商带货榜正确地址含尾部斜杠
/,productRank/*系列 URL 均返回 404 - 蝉妈妈所有榜单页均为 SPA,requests 只拿到 ~4.8KB 空壳(
<table>数为 0) - 百度热搜是纯服务端渲染,可直接 requests 提取嵌入的 JSON
已知数据限制
| 限制 | 说明 | 应对 |
|---|---|---|
| 无播放量 | 蝉妈妈榜单不提供,CSV 不再伪造该列 | 需要播放量只能进详情页 |
| 达人名"未知" | 电商榜对未登录访客隐藏作者,渲染成「查看」占位符 | 留空而非写"查看",报告标注 |
| 仅首屏 TOP10 | dump-dom 不支持滚动 | 榜单本身只要 TOP10,够用 |
| 销量/销售额是区间 | 蝉妈妈展示为「5000~1w / 1,912」 | 原样保留文本,不做单位换算 |
| 热搜非抖音站内 | 数据源是百度实时热搜 | 标题已标注来源 |
分类体系
视频 17 赛道 + 其他(categorize_video)
规则在 categories.json 的 video 字段。词典顺序即优先级(同分取靠前)。
| 赛道 | 关键词示例 |
|---|---|
| 剧情 | 剧情, 短剧, 演绎, 段子, 古装, 权谋, 历史剧 |
| 搞笑 | 搞笑, 沙雕, 整蛊, 爆笑, 梗, 抽象 |
| 明星娱乐 | 明星, 演员, 剧组, 路透, 综艺, 首映, 票房, 演唱会 |
| 体育 | 篮球, 足球, NBA, 世界杯, 奥运, 健身 |
| 音乐 | 唱歌, 翻唱, 演奏, 吉他, 说唱 |
| 游戏 | 游戏, 王者, 原神, LOL, 手游, 排位, 抽卡 |
| 美食 | 美食, 做饭, 吃播, 零食, 烧烤, 火锅, 探店 |
| 创意 | 特效, 剪辑, AI, 动画, 手工, DIY, 设计, 庭院 |
| 萌宠 | 猫, 狗, 宠物, 喵, 汪 |
| 美妆时尚 | 化妆, 护肤, 穿搭, 变装, 口红, 美甲 |
| 情感 | 情感, 恋爱, 分手, 催泪, 治愈, 励志, 夫妻, 幸福, 意难平 |
| 社会热点 | 新闻, 事件, 热点, 通报, 民生, 英雄, 台风, 报警, 闯入 |
| 二次元 | 动漫, cos, 番剧, 国漫, 手办 |
| 汽车 | 汽车, 跑车, 特斯拉, 比亚迪, 名车, 车神 |
| 教育科普 | 科普, 知识, 高考, 中考, 押题, 家长 |
| 舞蹈 | 跳舞, 街舞, 古典舞, 编舞 |
| 旅行 | 旅游, 景点, 打卡, 民宿, 露营 |
| 其他 | 未匹配任何关键词 |
打分规则:正文命中 +1,话题标签(#xxx)命中 +2 —— 标签是作者主动标注的,信号强于正文。实测:修复前未命中率 67%,v2.3 用当日真实榜单实测 其他 仅 1/10。
商品 7 大品类(_categorize_ecommerce)
| 品类 | 关键词示例 |
|---|---|
| 美妆护肤 | 口红, 粉底, 面膜, 乳液, 胶原蛋白, 可复美 |
| 服装鞋包 | 连衣裙, T恤, 女包, 童装, 套装 |
| 食品饮料 | 零食, 奶茶, 酸辣粉, 面包, 奶糖, 抹茶 |
| 家居日用 | 纸巾, 湿巾, 垃圾袋, 香薰, 盘香, 暖宝宝, 清洁 |
| 数码家电 | 手机壳, 充电宝, 耳机, 空气炸锅, 按摩仪 |
| 母婴亲子 | 尿不湿, 奶粉, 玩具, 辅食, 婴幼儿 |
| 运动户外 | 瑜伽垫, 帐篷, 泳衣, 健身器材 |
⚠️ 母婴亲子词典里不要放「宝宝」 —— 会误命中「暖宝宝」,把暖贴判成母婴用品。
在 WorkBuddy 中调用
当前注册状态
| 项 | 值 | 含义 |
|---|---|---|
disable | false | 已启用,会出现在 skill 列表里 |
disableModelInvocation | true | 只能由用户手动调用,模型不会自动触发 |
| 来源 | userSettings | 位于 ~/.workbuddy/skills/douyin-selenium-scraper/ |
也就是说:你说「帮我抓个抖音热榜」时,模型不会自动加载这个 skill;必须你在输入框里显式指定。
三种调用方式
1. 斜杠命令(最直接)
/douyin-selenium-scraper 全量跑一次,结果放 reports/输入 / 后也可搜「抖音」找到它(显示名:抖音Selenium爬虫(含电商))。
2. 自然语言 + 显式点名
用 douyin-selenium-scraper 这个 skill,抓热门、电商、热搜各 10 条3. 定时任务(无需人工触发)
在 WorkBuddy 里建每日 automation,prompt 见下方「Automation Prompt 模板」。定时任务不依赖模型自动调用,属于直接执行,不受上面的限制影响。
想让它自动触发怎么办
到 设置 → 技能 里找到该 skill,关掉「仅自己调用 / 允许模型调用」的开关,settings.json 中 skillOverrides["douyin-selenium-scraper"] 会随之移除,之后说「抓抖音热榜」即可自动命中。
若暂时不想改全局设置,直接斜杠命令调用即可,功能完全一致。
集成自动化
Automation Prompt 模板
你是一个定时运行的抖音数据分析助手。
#### Step 1:运行爬虫
cd ~/.workbuddy/skills/douyin-selenium-scraper
.venv/Scripts/python.exe douyin_scraper.py --json reports/latest.json
#### Step 2:判断结果
- 退出码 0:全部成功(含 dump-dom 降级),继续
- 退出码 2:部分成功(通常只剩热搜)。报告首行有「数据完整性提示」,
最终输出中必须标注哪些板块缺失,不要假装数据完整
- 退出码 1:全部失败,改用 WebSearch 兜底
#### Step 3:读取数据
优先读 --json 生成的 JSON(结构稳定),没有则读 reports/ 下最新 txt + CSV。
#### Step 4:AI 增强
- 为每条视频写一句话点评(爆火原因/传播点)
- 与上一份 JSON 对比,标注排名变动(↑↓新)
- 识别今日特别值得关注的内容
#### Step 5:推送
格式化为 Markdown,通过 mcp__tencent-docs API 推送到腾讯文档。定时任务注意
- 蝉妈妈有反爬,建议每天 ≤3 次,避开整点高峰
- 若日志里长期出现「降级为免驱动渲染」,说明 chromedriver 与 Chrome 不兼容,
可升级 selenium 或改用 dump-dom 常态运行(数据一致,只是拿不到滚动后的内容)
排障指南
常见问题
| 症状 | 原因 | 解决方案 |
|---|---|---|
unhandled request | chromedriver 与 Chrome 版本不兼容,整会话不可用 | v2.3 自动改走 dump-dom,无需干预;想修 Selenium 就升级 selenium / 换 Chrome |
| 日志出现「降级为免驱动渲染」 | 同上 | 属正常降级,数据完整(仅首屏 TOP10),退出码仍为 0 |
--dump-dom 返回空内容 | Chrome 启动失败或被策略拦截 | 检查 Chrome 能否手动 headless 打开;确认无企业策略禁 headless |
| 达人名为「未知」 | 电商榜对未登录访客隐藏作者(渲染成"查看") | 数据限制,非 bug;需要作者信息得登录蝉妈妈 |
| 电商/热门数据列错位 | 蝉妈妈调整了表头顺序或新增列 | v2.3 按表头名取值,一般自愈;若报「不是榜单表格」,打印表头更新 COLUMN_KEYS |
| 排名全是 1,2,3 但不像官方排名 | 排名列空文本 → 用行序兜底 | 行序即官方名次,正常 |
| 所有策略均未提取到有效数据 | 蝉妈妈改版了 DOM 结构 | --headed 打开页面,打印关键 class 名,更新选择器 |
| 百度热搜返回空列表 | 百度改版了 HTML 中的 JSON | 检查 "word" / "hotScore" 正则 |
| 热搜热度值与词对不上 | word 与 hotScore 数量不一致 | 日志 [百度热搜原始] word=x, hotScore=y 不等即是改版信号 |
| Permission denied 写 CSV | 上次文件仍被占用 | 已改为 .tmp + 原子替换 |
| 反爬验证码 | 访问太频繁 | 每天 ≤3 次 |
关键技术决策记录
- iesdouyin → douyin 链接转换:蝉妈妈表格不含直链,但每行隐藏
<a>有
iesdouyin.com/share/video/{ID}。提取后转标准地址,实测 10/10 成功。
- 百度热搜双正则配对:
desc字段极长含引号,无法用单个[^}]*跨。
解法:分别提取所有 word 和所有 hotScore,按下标配对;数量不一致会告警。
- 电商榜 URL:
productRank/*全线 404,正确地址从导航栏定位为awemeRank/promotionAweme/。 - 电商榜必须保留官方名次:按成交额排序,用点赞重排会彻底改变榜单语义。
- 等待条件要等"真数据":
[class*='item']几乎必然秒命中,等于没等;
改为「≥3 行真实榜单数据」后单页可省 5~8s。
- 免驱动渲染兜底:chromedriver 挂了但 Chrome 好的情况很常见,
--dump-dom --virtual-time-budget 能拿到同样的渲染结果,是性价比最高的兜底。
- 表头驱动解析:两个榜单列数不同(7 vs 9),任何固定下标方案都会在某次改版后静默错位。
Verification Checklist
运行成功标志:
- [ ] 日志:
✅ chanmama: 成功提取 10 条 - [ ] 日志:
✅ chanmama_ecommerce: 成功提取 10 条电商带货视频 - [ ] 日志:
✅ 热搜榜: 获取到 10 条 - [ ] 日志:
总耗时: xx s | 成功板块: 3/3 - [ ] 退出码 0
- [ ]
reports/douyin_report_*存在且 > 2000 bytes - [ ] 两个 CSV 存在(UTF-8-BOM),热门 9 列 / 电商 11 列
- [ ] 热门 CSV 的「转发数」有值(不是空)
- [ ] 电商 CSV 有「周期内销量」「周期内销售额」两列,且无重复拼接(
1,912只出现一次) - [ ] 排名徽章是 🏆🥈🥉(不是
Ἴ6) - [ ] 达人名没有
.4w尾巴,也没有把「查看」当昵称 - [ ] 报告含四段,热搜段标题含「来源:百度实时热搜」
快速验证命令
# 1) 回归测试(31 项,无需网络/浏览器)
.venv/Scripts/python.exe -m unittest discover -s tests -v
# 2) 只抓热搜,验证链路(最快,约 2s)
.venv/Scripts/python.exe douyin_scraper.py --only search
# 3) 检查最新产物
.venv/Scripts/python.exe -c "
import csv, glob, os
for pat, label in [('reports/douyin_hot_videos_*.csv','视频'),('reports/douyin_ecommerce_*.csv','电商')]:
fs = sorted(glob.glob(pat))
if fs:
rows = list(csv.DictReader(open(fs[-1], encoding='utf-8-sig')))
print(f'{label}: {len(rows)} 条 | 列: {list(rows[0].keys())}')
txt = sorted(glob.glob('reports/douyin_report_*.txt'))
if txt:
t = open(txt[-1], encoding='utf-8').read()
print(f'报告: {os.path.getsize(txt[-1])}B, 四段齐全={all(k in t for k in ["抖音热门视频","全网热搜","电商带货","趋势洞察"])}')
"修复记录
v2.3(2026-10-29,用当日真实榜单校验时发现)
| # | 问题 | 修复 |
|---|---|---|
| 1 | chromedriver 156 整会话不可用,热门/电商全丢 | 新增 fetch_page_chrome_dump() 免驱动渲染通道 |
| 2 | 固定列位取值导致「播放量」列实际写入转发数 | 改为按表头名建映射 _build_col_map() |
| 3 | 电商榜 9 列,第 6 列「周期内销量」被当成转发数 | 两榜列数分离适配,CSV 增加销量/销售额 |
| 4 | 排名列 CSS 渲染为空 → 官方名次全丢 | 用行序兜底 fallback_rank |
| 5 | 达人名「查看」占位符被当成人名 | 识别占位符返回空,报告标注「未知」 |
| 6 | 「暖宝宝」被「宝宝」误判为母婴亲子 | 母婴词典去掉「宝宝」,改「婴幼儿」 |
| 7 | 销量单元格嵌套 div 导致文本重复拼接 | _range_cell_text() 只取叶子节点 |
| 8 | 空达人名渲染成 (@) | 无作者时省略该片段 |
v2.2(针对 2026-10-29 评测报告)
| # | 问题 | 修复 |
|---|---|---|
| 1 | Skill 不自包含 | 脚本、categories、requirements、tests 全部入包 |
| 2 | webdriver-manager 每轮固定 12.2s | 移除,改用 Selenium Manager |
| 3 | u1f3c6 转义错误渲染成 Ἴ6 | 改用 U0001F3C6 |
| 4 | 达人名清不掉 .4w | 补正则,兼容 .4w / 粉丝10,505 / 时间戳 |
| 5 | 电商 CSV 品类被视频赛道覆盖 | 分类器注入 + 列名区分 |
| 6 | 电商榜按点赞重排 | sort_by="official" |
| 7 | 写「抖音热榜」实为百度数据 | 标题标注真实来源 |
| 8 | driver 失败直接 exit(1) | 探活 + 降级 + 退出码 0/2/1 |
| 9 | 等待条件形同虚设 | 改等「≥3 行真实数据」,滚动 3→1 轮 |
| 10 | 只能改源码切榜单 | CLI --only/--limit/--outdir/--json |
| 11 | 标题不截断 | 报告内 42 字截断,CSV 全文 |
| 12 | 分类 67% 落「其他」 | 打分制 + 标签加权 + 补词表 |
| 13 | 无 JSON 输出 | --json |
| 14 | .tmp 堆积 | 原子替换 + 定期清理 |
| 15 | 0 值变空串 | _format_num(zero=...) |
| 16 | 异常信息含换行 | one_line() |