影刀RPA实操指南:快手视频与评论数据批量采集实战
做短视频账号分析或者竞品内容调研的人应该都懂,快手一个视频下面几百上千条评论,光看播放量、点赞数还行,想批量把视频数据和评论内容抓下来做表格分析,手动复制粘贴一晚上也就干几十条。这篇讲怎么用影刀RPA把快手视频列表数据和评论内容一次采齐:自动打开主页、循环提取视频数据、逐条进详情页抓评论、去重后写入Excel。我是非技术出身,靠影刀RPA做了两年多采集,快手这套流程里滚动加载、哈希class定位、评论增量去重这几个坑我都踩过,解法全部写在这篇里。
快手和抖音一样是无限滚动页面,没有页码可以翻,采集逻辑的核心是「滚动一轮、提取一轮」的增量思路。另外快手的评论抽取按钮藏在详情页里,涉及新标签页的对象切换,这个细节处理不好,流程会出现「指令执行了但页面没反应」的假死状态,后面单独讲。
认识与安装:先把环境跑起来
影刀RPA从官网下载客户端,注册账号后就能用,社区版每天有运行时长限制,快手采集这种单次半小时内能跑完的任务够用,量大的话再考虑创业版。装完客户端第一件事是装浏览器扩展,Chrome和Edge都支持,扩展装好后浏览器右上角会出现影刀图标,这一步没做好后面所有网页指令都会报定位失败。
新建应用:客户端点「新建应用」→「桌面应用」,命名「快手视频评论采集」。编辑器分三块:左侧指令面板搜索指令,中间流程画布拖拽排序,右侧详情面板填参数。所有参数都在右侧面板设置,比如「打开网页」指令选中后,URL填快手创作者或用户主页地址,打开方式下拉选「新建标签页」。
运行时有一条铁律:流程跑起来别碰鼠标键盘。影刀的模拟模式是真实移动你的鼠标去点击,你一动流程就乱,这是新手最常见的事故,没有之一。
元素定位四合一:哈希class下的捕获与改写
快手页面的class名大量带构建哈希,直接用捕获出来的元素,过几天页面一更新就集体失效。四种定位手段在这里的配合顺序是:先捕获,再进元素编辑器删掉哈希节点,XPath改写,CSS补充,正则做文本清洗。
捕获操作:点顶部工具栏「捕获元素」按钮,浏览器自动跳转,鼠标移到视频卡片上出现橙色边框后点击确认。进元素编辑器逐级检查,凡是class里带长随机串的节点,把class条件删掉,改用父容器加子元素位置来约束,校验结果数量为1才算过关。
# 捕获元素:快手视频列表单个视频卡片(class前缀匹配避开哈希尾巴) //div[starts-with(@class,"video-card")] # 模糊匹配:定位视频标题链接 //*[contains(text(),"播放")]/ancestor::div[1]//a # 参照物定位:通过"赞"文本找到它旁边的点赞数 //*[contains(text(),"赞")]/following-sibling::*[1] # 层级定位:评论详情页里取评论内容,限定在评论容器内防止抓到推荐流 //div[starts-with(@class,"comment")]//*[contains(@class,"content")]CSS选择器做并列对照:[class^="video-card"]前缀匹配和XPath的starts-with效果一样,div[class*="author"]匹配class含author的元素。选型记住一条:同层属性筛选两者都能干,需要跨层级找父级、找兄弟时只能XPath。正则负责抓回来的文本清洗,评论里混着@用户和表情占位,用正则把@\S+删掉再入库。
变量与数据类型:采集数据的装载结构
这个流程要维护的核心变量五个:视频列表(列表)、当前视频(字典)、评论累计条数(数字)、滚动轮次(数字)、是否到底(布尔)。视频字典建议固定键名:标题、播放量、点赞数、发布时间、评论数,键名全小写,后续写入Excel按键取值不会乱。
两个数据类型的坑提前交代。一是播放量抓回来是「1.2万」这类文本,直接用「转换为数字类型」指令会报错,要先判断是否含「万」,含的话乘以10000再转。二是评论里的时间字段有的视频没有,字典取值前先判断键存在,不存在给默认空字符串,否则流程跑到一半崩掉你都不知道崩在第几条。
JSON在快手场景的用法是接口采集:F12能找到视频数据接口返回JSON,用JSON解析处理后写入表格,速度比页面抓取快一个量级。但接口参数有时效性,隔一阵就变,页面采集慢一点但稳,新手先把页面这条路线跑通。
流程控制:滚动加载与双层循环设计
快手视频列表和评论区都是无限滚动,循环结构用双层:外层管滚动加载,内层管增量提取。
外层While循环,条件是「视频累计数小于目标数」且「滚动轮次小于50轮」
循环体第一步「滚动网页」,location选「bottom」,behavior选「instant」
等待1秒,用「获取相似元素列表」重新抓当前已渲染的视频卡片
列表长度和上一轮相同说明到底了,置「是否到底」为假退出
内层For遍历新增部分,提取字段追加进数据列表,更新计数
防死循环的保险丝必须装。While条件里滚动轮次上限50轮是硬约束,我曾经见过一个流程滚动到两百多轮还在跑,浏览器内存直接被撑爆。两个条件任意一个满足就退出,这是所有采集流程的保命设置。
条件判断和异常处理的标准搭配:「判断元素是否存在」的If放在滚动之前,视频容器不在了说明页面结构变了或者被跳转登录页,直接输出日志告警退出。每轮滚动包在Try-Catch里,Catch里「输出日志」记录轮次和报错信息后继续下一轮,别让一条评论的异常废掉整个任务。
网页自动化:新标签页切换是快手采集的最大坑
从视频列表点进详情页会开新标签页,这是快手流程里最容易翻车的地方。后续指令必须作用在新页面上,正确做法是点进详情页后用「获取已打开的网页对象」按URL特征重新获取网页对象存成新变量,评论抓完「关闭标签页」,外层循环自然回到列表页继续点下一个。这个对象切换我第一次做的时候没处理,流程看起来每步都执行了,Excel里却一条数据都没有,排查了一下午才发现指令全打在旧标签页上。
弹窗处理用五步标准顺序:回车、Esc、刷新网页、点空白处、Tab加回车。快手的登录引导弹窗用Esc就能关掉,更稳妥的做法是流程开头先「判断元素是否存在」检测登录弹窗,存在就先关再开始采集。还有一种盲点弹窗,点它会跳转新页面,处理思路是先记录标签页总数,操作后数量变多就关掉新页回原页。
等待策略别用死等:固定的「等待几秒」在网速波动下要么等不够要么白等。正确姿势是「等待元素出现」指定评论容器,超时设5到10秒,元素真出现了立刻往下走,既稳又快。
数据处理:Excel写入与增量去重
落Excel的标准动作:「打开Excel工作簿」建当天文件,工作表头写死「标题、播放量、点赞、评论数、发布时间」,循环内「写入行数据到表格」逐条追加,全部写完「关闭工作簿」释放文件。评论单独一个工作表或者单独文件,字段是「视频标题、昵称、评论内容、点赞数、时间」。
去重是滚动采集的必修课。已渲染的视频和评论会一直留在DOM里,每轮「获取相似元素列表」抓回来的是累积列表,直接全量写入必然重复。按数据量选方案:
| 数据量 | 方案 | 做法 |
|---|---|---|
| 千条以内 | Excel函数 | COUNTIF标重复后筛选删除 |
| 万条级 | SQLite | 标题+昵称建UNIQUE索引,冲突跳过 |
| 单次流程内 | Python集合 | 内存维护已见指纹,写入前过滤 |
Python去重节点我封装了两年没改过,输入输出都写在注释里:
defmain(args):# 输入:items_list,本轮抓到的字典列表(视频或评论通用)# 输出:new_list,去掉已见重复后的增量数据seen=globals().get('seen_set',set())# 跨轮次复用已见指纹集合new_list=[]foritinitems_list:key=(it.get('标题',''),it.get('昵称',''))# 组合字段做指纹ifkeynotinseen:seen.add(key)new_list.append(it)globals()['seen_set']=seen# 存回全局供下一轮使用returnnew_list鼠标键盘图像:展开回复与图像兜底
主评论靠元素定位抓,折叠的二级回复需要点「展开N条回复」,按钮文本动态变化,用contains匹配「展开」二字定位,点击用模拟模式,点完等1秒让回复展开再抓。个别元素包在特殊容器里死活定位不到,退到图像识别兜底:截图按钮、图像点击、锚点选middleCenter。图像识别对分辨率和缩放比例敏感,只在固定环境跑没问题,换电脑要重新截图。
OCR的辅助用途是把评论里的图片型内容识别成文字当备注存,识别率一般,别当主数据用。
进阶技能与系统联动
进阶路线两条。一是「HTTP 请求」指令直接调快手的数据接口,效率是页面采集的十倍,前提是能从F12的Network面板定位到接口并搞定参数,这个能力需要一点抓包基础。二是用pandas做后处理:按点赞数排序、按关键词过滤、日环比计算,几百行数据循环处理和pandas处理速度差一个数量级。
系统联动把成果推出去:飞书多维表格写入指令把每天的视频数据同步成共享看板,团队里不用开Excel就能看;配合定时任务每天固定时间跑,跑完发一条飞书消息报「本次采集N条视频、M条评论」,出差也能掌握采集状态。
工程化规范:子流程拆分与调试
这套流程我拆成五个子流程:「01_打开快手主页」「02_滚动加载视频列表」「03_提取视频数据」「04_逐条进详情抓评论」「05_去重写入Excel」,主流程就是While循环串02到04,职责单一,改哪块不影响哪块。命名用编号前缀,指令列表里一眼看清执行顺序。
调试技巧:右键指令加断点单步执行,重点盯两个变量——相似元素列表的长度和滚动轮次。长度不涨说明懒加载断了,轮次异常增长说明保险丝没生效。日志分三层:轮次开始打「第N轮,列表M条」,轮次结束打「新增K条」,结束打总数,出错翻日志就能定位到轮次,不用重跑。
易错速查表
| 现象 | 原因 | 解决 |
|---|---|---|
| 抓到大量重复数据 | 已渲染元素留在DOM | 增量提取或Python指纹去重 |
| 指令执行了页面没反应 | 作用在旧标签页 | 获取已打开的网页对象切换 |
| 播放量转数字报错 | 文本含「万」 | 判断后乘10000再转换 |
| 滚动后列表没增长 | 懒加载未触发 | 滚到底等待1秒再校验 |
| 跑几十轮停不下来 | 没设轮次上限 | While条件加50轮硬上限 |
| 定位集体失效 | class哈希变了 | starts-with前缀匹配改写 |
| 时间字段缺失报错 | 部分数据无时间 | 字典取值给默认空字符串 |
| 半夜流程卡死 | 弹窗挡住操作 | 开头先检测并关闭登录弹窗 |
学习资源与延伸阅读
滚动加载、相似元素循环、网页对象切换这几块,官方指令文档里都有单独的帮助页,参数说明看文档最准。这套快手视频与评论采集的完整流程源码我放在代码仓库 home.linyan.cloud,可以直接参考改造,滚动轮次、目标采集条数、输出字段都留了参数位,换成你的需求改三个变量就能用。
#影刀RPA #RPA自动化 #快手采集 #数据采集 #批量采集
作者:林焱