TikTok评论采集工具实战手记:一次搞定评论批量导出到Excel
TikTok评论采集工具实战手记一次搞定评论批量导出到Excel【免费下载链接】TikTokCommentScraper项目地址: https://gitcode.com/gh_mirrors/ti/TikTokCommentScraperTikTokCommentScraper 是一款开源的 TikTok 评论采集工具它的目标很朴素把某个视频下你能看到的所有评论包括一层一层的楼中楼回复整整齐齐地导出成一个 Excel 表格。我最初注意到它是因为一次被评论区折磨到崩溃的经历今天就把这段从零到一的完整过程写出来希望能帮到同样需要批量导出 TikTok 评论的你。先说说我为什么盯上了它事情是这样的朋友组织了一场线上抽奖中奖规则是从评论区随机抽取结果那条视频攒了 2000 多条评论还有大量楼中楼回复。公平抽奖的前提是把评论完整导出来可 TikTok 根本没有批量导出评论这个按钮手动往下滚、复制、粘贴滚到 500 条就手酸了二级回复还丢得七七八八——这活根本没法干。TikTokCommentScraper 正是为这类场景设计的。它把整个采集拆成了两个环节浏览器里跑一段 JavaScript负责把评论全部加载出来并转成 CSV 格式再用一段 Python 脚本把剪贴板里的 CSV 变成 Excel 文件。全程不需要写爬虫、不需要处理复杂的登录接口思路清爽得让人意外。开工前的三件套准备准备过程比想象中简单拢共三件事。第一件是拿到代码。克隆仓库即可git clone https://gitcode.com/gh_mirrors/ti/TikTokCommentScraper第二件是搞定运行环境。这里有个贴心设计仓库里直接塞了一个裁剪过的 Python 虚拟环境python38/目录约 7MBWindows 用户克隆下来连 Python 都不用装双击根目录下的两个.cmd文件就能跑。如果用的是 Linux 或 macOS装两个依赖就行项目就依赖这么点东西pip install -r requirements.txtrequirements.txt里只有pyperclip剪贴板读写和openpyxlExcel 写入依赖极简。第三件是浏览器必须是 Chromium 内核的Chrome、Edge、Brave 都行。打开目标视频页确认评论区能正常手动滚动然后按下 F12 或 CtrlShiftJ 打开开发者控制台准备工作就绪。第一次跑通从控制台到 Excel 的完整流程整个流程只有三个动作我用九分钟跑完了第一次。第一步双击根目录的Copy JavaScript for Developer Console.cmd非 Windows 用户运行python src/CopyJavascript.py。它的作用是把src/ScrapeTikTokComments.js这段采集脚本复制到剪贴板省得手动复制一大段代码。切回浏览器控制台粘贴、回车好戏开场。你会发现脚本在控制台不断输出Loading 1st level comment number 37这样的日志数字持续增长。它做的事情其实就是滚到底部 → 等 TikTok 加载新评论 → 再滚。核心循环长这样var loadingCommentsBuffer 30; while (loadingCommentsBuffer 0) { allComments getAllComments(); lastComment allComments[allComments.length - 1]; lastComment.scrollIntoView(false); // 滚到最后一个评论逼平台加载更多 if (评论数量有变化) { loadingCommentsBuffer 15; // 有新增就重置计数 } else { loadingCommentsBuffer--; // 连续多轮没新增判定加载完毕 } await new Promise(r setTimeout(r, 300)); }原理一句话就能说清把最后一个评论滚动到视野内TikTok 的懒加载就会被触发连续 15 轮没有新评论出现就认为一级评论加载完了。这套模拟真人滚动的思路比直接请求接口要稳得多也绕开了不少反爬校验。等Opened all 1st level comments出现后脚本进入第二阶段——展开所有楼中楼回复。它用 XPath 精准找到所有写着 View 的按钮注意它特意匹配 View 而不是 Hide避免误点收起按钮挨个点击直到连续 5 轮没有新按钮出现var viewMoreDivXPath //p[contains(class, PReplyAction) and contains(., View)];第二步等控制台输出CSV copied to clipboard!说明采集完成所有评论已经转成 CSV 文本躺在剪贴板里了。这时候注意千万别再复制任何别的东西。第三步双击Extract Comments from Clipboard.cmd非 Windows 用户运行python src/ScrapeTikTokComments.pyPython 脚本接手从剪贴板读出 CSV、写进临时文件、再转成 Excel最后自动清理临时文件。核心逻辑非常直白csv pyperclip.paste() # 从剪贴板取回 CSV # ...清洗换行符后写入 Comments.csv... wb Workbook() ws wb.active for row in reader(f): # 逐行读入 Excel ws.append(row) wb.save(fComments_{d.timestamp(d.now())}.xlsx)于是项目目录里多了一个类似Comments_1723967265.23.xlsx的文件用 Excel 或 LibreOffice 打开2000 多条评论整整齐齐躺在里面。拿到数据后我才看懂的巧思第一次打开那个 Excel我才真正体会到这个项目为数据完整性花了多少心思。每个评论不是孤立的文本而是一条完整的记录昵称、用户名、用户主页链接、评论内容、时间、点赞数、头像 URL还有三个特别关键的字段——Is 2nd Level Comment是不是楼中楼、User Replied To回复的是谁、Number of Replies这条评论带多少条回复。楼中楼被清楚地标注出来并挂回父评论对话线程的层级关系一点没丢。这意味着你不仅能数评论还能还原谁回复了谁的互动结构做情感分析或意见领袖研究都够用。表格顶部还有一小块视频元信息作者昵称与主页、发布时间、视频点赞数、分享数、描述文案甚至分别统计了一级评论和二级评论的数量。最妙的是它把平台声称的评论总数和实际渲染出来的评论数并列写出来还给你算好差值。踩过的坑我替你趟过了实战不可能一帆风顺几个坑我挨个说清楚。第一个坑是数字对不上。TikTok 图标上显示 750 条评论全部加载完数出来只有 740 条左右——这不是 bug而是平台本身的限制。项目作者在 README 里专门记录了这一点在一条 3000 评论的测试视频里有 64 条评论从头到尾没被渲染出来自然也就进不了 Excel。好在脚本把这条差值如实写进了表格你对数据完整性心里有数不会拿着虚高的数字去做统计。第二个坑是日期格式。TikTok 页面上显示的是MM-DD脚本会自动换算成DD-MM-YYYY省得你导出后自己折腾格式转换源码里的formatDate函数就是这个作用。第三个坑和网络有关。评论加载循环里有个loadingCommentsBuffer缓冲值默认 30。如果网速慢、加载时间长循环可能误判加载完成提前退出——源码注释里也提示了加载太慢导致提前跳出时就把这个缓冲调大。大视频建议分段采集一次别贪多。还有一个无论如何要记住的安全提醒往开发者控制台里粘贴代码是高风险动作。README 特别说明这段脚本本身不发任何网络请求唯一的敏感操作是把结果写入剪贴板但保险起见执行前还是通读一遍源码。我的习惯是先打开src/ScrapeTikTokComments.js扫一眼再粘贴。事后复盘这套流程能带走什么跑通一次之后回头看这个项目给我的启发远不止导出一份 Excel。它的方法论其实是一个通用范式套在任何长列表 懒加载的页面上都成立第一步用滚动触发加载第二步展开折叠内容第三步一次性结构化导出。三步之间用连续 N 轮无变化作为完成判据比写死的延时循环可靠得多——这是从它身上学到的第一个心法。第二个心法是留证据它把平台声称数、实际渲染数、差值全部落进表格让数据的不确定性显性化。做数据分析的人都知道敢把误差摆出来的工具才值得信任。第三个心法更实在给新手的一句话建议是先从一条几百条评论的小视频练手跑通全流程、看懂每个日志输出再上大视频。等看到CSV copied to clipboard!出现得越来越坦然你就出师了。回看开头那场抽奖最后我用导出的 2100 多条评论做了个数据透视表按点赞数排序筛出高互动用户再随机抽样确定中奖名单整个过程公开透明朋友直呼专业。一段让我想放弃的重复劳动最后变成了一次流畅的工具初体验——如果你也在为 TikTok 评论数据批量导出发愁不妨就按这篇文章的路线走一遍。源码参考浏览器端采集脚本src/ScrapeTikTokComments.js、数据导出脚本src/ScrapeTikTokComments.py、剪贴板辅助脚本src/CopyJavascript.py使用说明详见README.md。【免费下载链接】TikTokCommentScraper项目地址: https://gitcode.com/gh_mirrors/ti/TikTokCommentScraper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考